/* DO NOT EDIT, please edit generator instead.
   This file was generated by gen-vector-iterator with the command:
   $ ./gen-vector-iterator -usr-c > riscv_vector_itr.h  */
#ifndef _GCC_RISCV_VECTOR_H

#error "Never included riscv_vector_itr.h, plz include riscv_vector.h"

#endif

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector and integer types.  */
#define _RVV_INT_ITERATOR(MACRO) \
  MACRO (8, f8, 64, int8_t) \
  MACRO (8, f4, 32, int8_t) \
  MACRO (8, f2, 16, int8_t) \
  MACRO (8, 1, 8, int8_t) \
  MACRO (8, 2, 4, int8_t) \
  MACRO (8, 4, 2, int8_t) \
  MACRO (8, 8, 1, int8_t) \
  MACRO (16, f4, 64, int16_t) \
  MACRO (16, f2, 32, int16_t) \
  MACRO (16, 1, 16, int16_t) \
  MACRO (16, 2, 8, int16_t) \
  MACRO (16, 4, 4, int16_t) \
  MACRO (16, 8, 2, int16_t) \
  MACRO (32, f2, 64, int32_t) \
  MACRO (32, 1, 32, int32_t) \
  MACRO (32, 2, 16, int32_t) \
  MACRO (32, 4, 8, int32_t) \
  MACRO (32, 8, 4, int32_t) \
  MACRO (64, 1, 64, int64_t) \
  MACRO (64, 2, 32, int64_t) \
  MACRO (64, 4, 16, int64_t) \
  MACRO (64, 8, 8, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, f8, 64, int8_t, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, __VA_ARGS__) \
  MACRO (8, 8, 1, int8_t, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, __VA_ARGS__) \
  MACRO (16, 8, 2, int16_t, __VA_ARGS__) \
  MACRO (32, f2, 64, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 4, 16, int64_t, __VA_ARGS__) \
  MACRO (64, 8, 8, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, integer types, and info for
   corresponding widening vector type.  */
#define _RVV_WINT_ITERATOR(MACRO) \
  MACRO (8, f8, 64, int8_t, 16, f4, int16_t) \
  MACRO (8, f4, 32, int8_t, 16, f2, int16_t) \
  MACRO (8, f2, 16, int8_t, 16, 1, int16_t) \
  MACRO (8, 1, 8, int8_t, 16, 2, int16_t) \
  MACRO (8, 2, 4, int8_t, 16, 4, int16_t) \
  MACRO (8, 4, 2, int8_t, 16, 8, int16_t) \
  MACRO (16, f4, 64, int16_t, 32, f2, int32_t) \
  MACRO (16, f2, 32, int16_t, 32, 1, int32_t) \
  MACRO (16, 1, 16, int16_t, 32, 2, int32_t) \
  MACRO (16, 2, 8, int16_t, 32, 4, int32_t) \
  MACRO (16, 4, 4, int16_t, 32, 8, int32_t) \
  MACRO (32, f2, 64, int32_t, 64, 1, int64_t) \
  MACRO (32, 1, 32, int32_t, 64, 2, int64_t) \
  MACRO (32, 2, 16, int32_t, 64, 4, int64_t) \
  MACRO (32, 4, 8, int32_t, 64, 8, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_WINT_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, f8, 64, int8_t, 16, f4, int16_t, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 16, f2, int16_t, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 16, 1, int16_t, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 16, 2, int16_t, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 16, 4, int16_t, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 16, 8, int16_t, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, 32, f2, int32_t, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 32, 1, int32_t, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 32, 2, int32_t, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 32, 4, int32_t, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, 32, 8, int32_t, __VA_ARGS__) \
  MACRO (32, f2, 64, int32_t, 64, 1, int64_t, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, 64, 2, int64_t, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, 64, 4, int64_t, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, 64, 8, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, integer types, and info for
   corresponding widening vector type but with LMUL 1.  */
#define _RVV_WRED_INT_ITERATOR(MACRO) \
  MACRO (8, f8, 64, int8_t, 16, 1, int16_t) \
  MACRO (8, f4, 32, int8_t, 16, 1, int16_t) \
  MACRO (8, f2, 16, int8_t, 16, 1, int16_t) \
  MACRO (8, 1, 8, int8_t, 16, 1, int16_t) \
  MACRO (8, 2, 4, int8_t, 16, 1, int16_t) \
  MACRO (8, 4, 2, int8_t, 16, 1, int16_t) \
  MACRO (8, 8, 1, int8_t, 16, 1, int16_t) \
  MACRO (16, f4, 64, int16_t, 32, 1, int32_t) \
  MACRO (16, f2, 32, int16_t, 32, 1, int32_t) \
  MACRO (16, 1, 16, int16_t, 32, 1, int32_t) \
  MACRO (16, 2, 8, int16_t, 32, 1, int32_t) \
  MACRO (16, 4, 4, int16_t, 32, 1, int32_t) \
  MACRO (16, 8, 2, int16_t, 32, 1, int32_t) \
  MACRO (32, f2, 64, int32_t, 64, 1, int64_t) \
  MACRO (32, 1, 32, int32_t, 64, 1, int64_t) \
  MACRO (32, 2, 16, int32_t, 64, 1, int64_t) \
  MACRO (32, 4, 8, int32_t, 64, 1, int64_t) \
  MACRO (32, 8, 4, int32_t, 64, 1, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_WRED_INT_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, f8, 64, int8_t, 16, 1, int16_t, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 16, 1, int16_t, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 16, 1, int16_t, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 16, 1, int16_t, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 16, 1, int16_t, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 16, 1, int16_t, __VA_ARGS__) \
  MACRO (8, 8, 1, int8_t, 16, 1, int16_t, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, 32, 1, int32_t, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 32, 1, int32_t, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 32, 1, int32_t, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 32, 1, int32_t, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, 32, 1, int32_t, __VA_ARGS__) \
  MACRO (16, 8, 2, int16_t, 32, 1, int32_t, __VA_ARGS__) \
  MACRO (32, f2, 64, int32_t, 64, 1, int64_t, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, 64, 1, int64_t, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, 64, 1, int64_t, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, 64, 1, int64_t, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, 64, 1, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, integer types, and info for
   corresponding quad widening vector type.  */
#define _RVV_QINT_ITERATOR(MACRO) \
  MACRO (8, f8, 64, int8_t, 32, f2, int32_t) \
  MACRO (8, f4, 32, int8_t, 32, 1, int32_t) \
  MACRO (8, f2, 16, int8_t, 32, 2, int32_t) \
  MACRO (8, 1, 8, int8_t, 32, 4, int32_t) \
  MACRO (8, 2, 4, int8_t, 32, 8, int32_t) \
  MACRO (16, f4, 64, int16_t, 64, 1, int64_t) \
  MACRO (16, f2, 32, int16_t, 64, 2, int64_t) \
  MACRO (16, 1, 16, int16_t, 64, 4, int64_t) \
  MACRO (16, 2, 8, int16_t, 64, 8, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_QINT_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, f8, 64, int8_t, 32, f2, int32_t, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 32, 1, int32_t, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 32, 2, int32_t, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 32, 4, int32_t, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 32, 8, int32_t, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, 64, 1, int64_t, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 64, 2, int64_t, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 64, 4, int64_t, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 64, 8, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, integer modes, and info for
   corresponding eightfold widening vector type.  */
#define _RVV_EINT_ITERATOR(MACRO) \
  MACRO (8, f8, 64, int8_t, 64, 1, int64_t) \
  MACRO (8, f4, 32, int8_t, 64, 2, int64_t) \
  MACRO (8, f2, 16, int8_t, 64, 4, int64_t) \
  MACRO (8, 1, 8, int8_t, 64, 8, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_EINT_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, f8, 64, int8_t, 64, 1, int64_t, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 64, 2, int64_t, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 64, 4, int64_t, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 64, 8, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector and floating point modes.  */
#define _RVV_FLOAT_ITERATOR(MACRO) \
  MACRO (16, f4, 64, __float16_t) \
  MACRO (16, f2, 32, __float16_t) \
  MACRO (16, 1, 16, __float16_t) \
  MACRO (16, 2, 8, __float16_t) \
  MACRO (16, 4, 4, __float16_t) \
  MACRO (16, 8, 2, __float16_t) \
  MACRO (32, f2, 64, __float32_t) \
  MACRO (32, 1, 32, __float32_t) \
  MACRO (32, 2, 16, __float32_t) \
  MACRO (32, 4, 8, __float32_t) \
  MACRO (32, 8, 4, __float32_t) \
  MACRO (64, 1, 64, __float64_t) \
  MACRO (64, 2, 32, __float64_t) \
  MACRO (64, 4, 16, __float64_t) \
  MACRO (64, 8, 8, __float64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, f4, 64, __float16_t, __VA_ARGS__) \
  MACRO (16, f2, 32, __float16_t, __VA_ARGS__) \
  MACRO (16, 1, 16, __float16_t, __VA_ARGS__) \
  MACRO (16, 2, 8, __float16_t, __VA_ARGS__) \
  MACRO (16, 4, 4, __float16_t, __VA_ARGS__) \
  MACRO (16, 8, 2, __float16_t, __VA_ARGS__) \
  MACRO (32, f2, 64, __float32_t, __VA_ARGS__) \
  MACRO (32, 1, 32, __float32_t, __VA_ARGS__) \
  MACRO (32, 2, 16, __float32_t, __VA_ARGS__) \
  MACRO (32, 4, 8, __float32_t, __VA_ARGS__) \
  MACRO (32, 8, 4, __float32_t, __VA_ARGS__) \
  MACRO (64, 1, 64, __float64_t, __VA_ARGS__) \
  MACRO (64, 2, 32, __float64_t, __VA_ARGS__) \
  MACRO (64, 4, 16, __float64_t, __VA_ARGS__) \
  MACRO (64, 8, 8, __float64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, floating modes, and info for
   corresponding widening vector type.  */
#define _RVV_WFLOAT_ITERATOR(MACRO) \
  MACRO (16, f4, 64, __float16_t, 32, f2, __float32_t) \
  MACRO (16, f2, 32, __float16_t, 32, 1, __float32_t) \
  MACRO (16, 1, 16, __float16_t, 32, 2, __float32_t) \
  MACRO (16, 2, 8, __float16_t, 32, 4, __float32_t) \
  MACRO (16, 4, 4, __float16_t, 32, 8, __float32_t) \
  MACRO (32, f2, 64, __float32_t, 64, 1, __float64_t) \
  MACRO (32, 1, 32, __float32_t, 64, 2, __float64_t) \
  MACRO (32, 2, 16, __float32_t, 64, 4, __float64_t) \
  MACRO (32, 4, 8, __float32_t, 64, 8, __float64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_WFLOAT_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, f4, 64, __float16_t, 32, f2, __float32_t, __VA_ARGS__) \
  MACRO (16, f2, 32, __float16_t, 32, 1, __float32_t, __VA_ARGS__) \
  MACRO (16, 1, 16, __float16_t, 32, 2, __float32_t, __VA_ARGS__) \
  MACRO (16, 2, 8, __float16_t, 32, 4, __float32_t, __VA_ARGS__) \
  MACRO (16, 4, 4, __float16_t, 32, 8, __float32_t, __VA_ARGS__) \
  MACRO (32, f2, 64, __float32_t, 64, 1, __float64_t, __VA_ARGS__) \
  MACRO (32, 1, 32, __float32_t, 64, 2, __float64_t, __VA_ARGS__) \
  MACRO (32, 2, 16, __float32_t, 64, 4, __float64_t, __VA_ARGS__) \
  MACRO (32, 4, 8, __float32_t, 64, 8, __float64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, floating types, and info for
   corresponding widening vector type but with LMUL 1.  */
#define _RVV_WRED_FLOAT_ITERATOR(MACRO) \
  MACRO (16, f4, 64, __float16_t, 32, 1, __float32_t) \
  MACRO (16, f2, 32, __float16_t, 32, 1, __float32_t) \
  MACRO (16, 1, 16, __float16_t, 32, 1, __float32_t) \
  MACRO (16, 2, 8, __float16_t, 32, 1, __float32_t) \
  MACRO (16, 4, 4, __float16_t, 32, 1, __float32_t) \
  MACRO (16, 8, 2, __float16_t, 32, 1, __float32_t) \
  MACRO (32, f2, 64, __float32_t, 64, 1, __float64_t) \
  MACRO (32, 1, 32, __float32_t, 64, 1, __float64_t) \
  MACRO (32, 2, 16, __float32_t, 64, 1, __float64_t) \
  MACRO (32, 4, 8, __float32_t, 64, 1, __float64_t) \
  MACRO (32, 8, 4, __float32_t, 64, 1, __float64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_WRED_FLOAT_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, f4, 64, __float16_t, 32, 1, __float32_t, __VA_ARGS__) \
  MACRO (16, f2, 32, __float16_t, 32, 1, __float32_t, __VA_ARGS__) \
  MACRO (16, 1, 16, __float16_t, 32, 1, __float32_t, __VA_ARGS__) \
  MACRO (16, 2, 8, __float16_t, 32, 1, __float32_t, __VA_ARGS__) \
  MACRO (16, 4, 4, __float16_t, 32, 1, __float32_t, __VA_ARGS__) \
  MACRO (16, 8, 2, __float16_t, 32, 1, __float32_t, __VA_ARGS__) \
  MACRO (32, f2, 64, __float32_t, 64, 1, __float64_t, __VA_ARGS__) \
  MACRO (32, 1, 32, __float32_t, 64, 1, __float64_t, __VA_ARGS__) \
  MACRO (32, 2, 16, __float32_t, 64, 1, __float64_t, __VA_ARGS__) \
  MACRO (32, 4, 8, __float32_t, 64, 1, __float64_t, __VA_ARGS__) \
  MACRO (32, 8, 4, __float32_t, 64, 1, __float64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding integer and vector type.  */
#define _RVV_FLOAT_INT_ITERATOR(MACRO) \
  MACRO (16, f4, 64, __float16_t, int16_t) \
  MACRO (16, f2, 32, __float16_t, int16_t) \
  MACRO (16, 1, 16, __float16_t, int16_t) \
  MACRO (16, 2, 8, __float16_t, int16_t) \
  MACRO (16, 4, 4, __float16_t, int16_t) \
  MACRO (16, 8, 2, __float16_t, int16_t) \
  MACRO (32, f2, 64, __float32_t, int32_t) \
  MACRO (32, 1, 32, __float32_t, int32_t) \
  MACRO (32, 2, 16, __float32_t, int32_t) \
  MACRO (32, 4, 8, __float32_t, int32_t) \
  MACRO (32, 8, 4, __float32_t, int32_t) \
  MACRO (64, 1, 64, __float64_t, int64_t) \
  MACRO (64, 2, 32, __float64_t, int64_t) \
  MACRO (64, 4, 16, __float64_t, int64_t) \
  MACRO (64, 8, 8, __float64_t, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_INT_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, f4, 64, __float16_t, int16_t, __VA_ARGS__) \
  MACRO (16, f2, 32, __float16_t, int16_t, __VA_ARGS__) \
  MACRO (16, 1, 16, __float16_t, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 8, __float16_t, int16_t, __VA_ARGS__) \
  MACRO (16, 4, 4, __float16_t, int16_t, __VA_ARGS__) \
  MACRO (16, 8, 2, __float16_t, int16_t, __VA_ARGS__) \
  MACRO (32, f2, 64, __float32_t, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 32, __float32_t, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 16, __float32_t, int32_t, __VA_ARGS__) \
  MACRO (32, 4, 8, __float32_t, int32_t, __VA_ARGS__) \
  MACRO (32, 8, 4, __float32_t, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 64, __float64_t, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 32, __float64_t, int64_t, __VA_ARGS__) \
  MACRO (64, 4, 16, __float64_t, int64_t, __VA_ARGS__) \
  MACRO (64, 8, 8, __float64_t, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, integer types, and info for
   corresponding integer and vector type.  */
#define _RVV_INT_INDEX_ITERATOR(MACRO) \
  MACRO (8, f8, 64, int8_t, 8, f8) \
  MACRO (8, f8, 64, int8_t, 16, f4) \
  MACRO (8, f8, 64, int8_t, 32, f2) \
  MACRO (8, f8, 64, int8_t, 64, 1) \
  MACRO (8, f4, 32, int8_t, 8, f4) \
  MACRO (8, f4, 32, int8_t, 16, f2) \
  MACRO (8, f4, 32, int8_t, 32, 1) \
  MACRO (8, f4, 32, int8_t, 64, 2) \
  MACRO (8, f2, 16, int8_t, 8, f2) \
  MACRO (8, f2, 16, int8_t, 16, 1) \
  MACRO (8, f2, 16, int8_t, 32, 2) \
  MACRO (8, f2, 16, int8_t, 64, 4) \
  MACRO (8, 1, 8, int8_t, 8, 1) \
  MACRO (8, 1, 8, int8_t, 16, 2) \
  MACRO (8, 1, 8, int8_t, 32, 4) \
  MACRO (8, 1, 8, int8_t, 64, 8) \
  MACRO (8, 2, 4, int8_t, 8, 2) \
  MACRO (8, 2, 4, int8_t, 16, 4) \
  MACRO (8, 2, 4, int8_t, 32, 8) \
  MACRO (8, 4, 2, int8_t, 8, 4) \
  MACRO (8, 4, 2, int8_t, 16, 8) \
  MACRO (8, 8, 1, int8_t, 8, 8) \
  MACRO (16, f4, 64, int16_t, 8, f8) \
  MACRO (16, f4, 64, int16_t, 16, f4) \
  MACRO (16, f4, 64, int16_t, 32, f2) \
  MACRO (16, f4, 64, int16_t, 64, 1) \
  MACRO (16, f2, 32, int16_t, 8, f4) \
  MACRO (16, f2, 32, int16_t, 16, f2) \
  MACRO (16, f2, 32, int16_t, 32, 1) \
  MACRO (16, f2, 32, int16_t, 64, 2) \
  MACRO (16, 1, 16, int16_t, 8, f2) \
  MACRO (16, 1, 16, int16_t, 16, 1) \
  MACRO (16, 1, 16, int16_t, 32, 2) \
  MACRO (16, 1, 16, int16_t, 64, 4) \
  MACRO (16, 2, 8, int16_t, 8, 1) \
  MACRO (16, 2, 8, int16_t, 16, 2) \
  MACRO (16, 2, 8, int16_t, 32, 4) \
  MACRO (16, 2, 8, int16_t, 64, 8) \
  MACRO (16, 4, 4, int16_t, 8, 2) \
  MACRO (16, 4, 4, int16_t, 16, 4) \
  MACRO (16, 4, 4, int16_t, 32, 8) \
  MACRO (16, 8, 2, int16_t, 8, 4) \
  MACRO (16, 8, 2, int16_t, 16, 8) \
  MACRO (32, f2, 64, int32_t, 8, f8) \
  MACRO (32, f2, 64, int32_t, 16, f4) \
  MACRO (32, f2, 64, int32_t, 32, f2) \
  MACRO (32, f2, 64, int32_t, 64, 1) \
  MACRO (32, 1, 32, int32_t, 8, f4) \
  MACRO (32, 1, 32, int32_t, 16, f2) \
  MACRO (32, 1, 32, int32_t, 32, 1) \
  MACRO (32, 1, 32, int32_t, 64, 2) \
  MACRO (32, 2, 16, int32_t, 8, f2) \
  MACRO (32, 2, 16, int32_t, 16, 1) \
  MACRO (32, 2, 16, int32_t, 32, 2) \
  MACRO (32, 2, 16, int32_t, 64, 4) \
  MACRO (32, 4, 8, int32_t, 8, 1) \
  MACRO (32, 4, 8, int32_t, 16, 2) \
  MACRO (32, 4, 8, int32_t, 32, 4) \
  MACRO (32, 4, 8, int32_t, 64, 8) \
  MACRO (32, 8, 4, int32_t, 8, 2) \
  MACRO (32, 8, 4, int32_t, 16, 4) \
  MACRO (32, 8, 4, int32_t, 32, 8) \
  MACRO (64, 1, 64, int64_t, 8, f8) \
  MACRO (64, 1, 64, int64_t, 16, f4) \
  MACRO (64, 1, 64, int64_t, 32, f2) \
  MACRO (64, 1, 64, int64_t, 64, 1) \
  MACRO (64, 2, 32, int64_t, 8, f4) \
  MACRO (64, 2, 32, int64_t, 16, f2) \
  MACRO (64, 2, 32, int64_t, 32, 1) \
  MACRO (64, 2, 32, int64_t, 64, 2) \
  MACRO (64, 4, 16, int64_t, 8, f2) \
  MACRO (64, 4, 16, int64_t, 16, 1) \
  MACRO (64, 4, 16, int64_t, 32, 2) \
  MACRO (64, 4, 16, int64_t, 64, 4) \
  MACRO (64, 8, 8, int64_t, 8, 1) \
  MACRO (64, 8, 8, int64_t, 16, 2) \
  MACRO (64, 8, 8, int64_t, 32, 4) \
  MACRO (64, 8, 8, int64_t, 64, 8) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, f8, 64, int8_t, 8, f8, __VA_ARGS__) \
  MACRO (8, f8, 64, int8_t, 16, f4, __VA_ARGS__) \
  MACRO (8, f8, 64, int8_t, 32, f2, __VA_ARGS__) \
  MACRO (8, f8, 64, int8_t, 64, 1, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 8, f4, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 16, f2, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 32, 1, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 64, 2, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 8, f2, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 16, 1, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 32, 2, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 64, 4, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 16, 4, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 32, 8, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 8, 4, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 16, 8, __VA_ARGS__) \
  MACRO (8, 8, 1, int8_t, 8, 8, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, 8, f8, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, 16, f4, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, 32, f2, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, 64, 1, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 8, f4, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 16, f2, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 32, 1, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 64, 2, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 8, f2, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, 8, 2, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, 32, 8, __VA_ARGS__) \
  MACRO (16, 8, 2, int16_t, 8, 4, __VA_ARGS__) \
  MACRO (16, 8, 2, int16_t, 16, 8, __VA_ARGS__) \
  MACRO (32, f2, 64, int32_t, 8, f8, __VA_ARGS__) \
  MACRO (32, f2, 64, int32_t, 16, f4, __VA_ARGS__) \
  MACRO (32, f2, 64, int32_t, 32, f2, __VA_ARGS__) \
  MACRO (32, f2, 64, int32_t, 64, 1, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, 8, f4, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, 16, f2, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, 8, f2, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, 8, 1, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, 16, 2, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, 32, 4, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, 64, 8, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, 8, 2, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, 16, 4, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, 32, 8, __VA_ARGS__) \
  MACRO (64, 1, 64, int64_t, 8, f8, __VA_ARGS__) \
  MACRO (64, 1, 64, int64_t, 16, f4, __VA_ARGS__) \
  MACRO (64, 1, 64, int64_t, 32, f2, __VA_ARGS__) \
  MACRO (64, 1, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 32, int64_t, 8, f4, __VA_ARGS__) \
  MACRO (64, 2, 32, int64_t, 16, f2, __VA_ARGS__) \
  MACRO (64, 2, 32, int64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 2, 32, int64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 4, 16, int64_t, 8, f2, __VA_ARGS__) \
  MACRO (64, 4, 16, int64_t, 16, 1, __VA_ARGS__) \
  MACRO (64, 4, 16, int64_t, 32, 2, __VA_ARGS__) \
  MACRO (64, 4, 16, int64_t, 64, 4, __VA_ARGS__) \
  MACRO (64, 8, 8, int64_t, 8, 1, __VA_ARGS__) \
  MACRO (64, 8, 8, int64_t, 16, 2, __VA_ARGS__) \
  MACRO (64, 8, 8, int64_t, 32, 4, __VA_ARGS__) \
  MACRO (64, 8, 8, int64_t, 64, 8, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point types, and info for
   corresponding floating point and vector type.  */
#define _RVV_FLOAT_INDEX_ITERATOR(MACRO) \
  MACRO (16, f4, 64, __float16_t, 8, f8) \
  MACRO (16, f4, 64, __float16_t, 16, f4) \
  MACRO (16, f4, 64, __float16_t, 32, f2) \
  MACRO (16, f4, 64, __float16_t, 64, 1) \
  MACRO (16, f2, 32, __float16_t, 8, f4) \
  MACRO (16, f2, 32, __float16_t, 16, f2) \
  MACRO (16, f2, 32, __float16_t, 32, 1) \
  MACRO (16, f2, 32, __float16_t, 64, 2) \
  MACRO (16, 1, 16, __float16_t, 8, f2) \
  MACRO (16, 1, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 16, __float16_t, 64, 4) \
  MACRO (16, 2, 8, __float16_t, 8, 1) \
  MACRO (16, 2, 8, __float16_t, 16, 2) \
  MACRO (16, 2, 8, __float16_t, 32, 4) \
  MACRO (16, 2, 8, __float16_t, 64, 8) \
  MACRO (16, 4, 4, __float16_t, 8, 2) \
  MACRO (16, 4, 4, __float16_t, 16, 4) \
  MACRO (16, 4, 4, __float16_t, 32, 8) \
  MACRO (16, 8, 2, __float16_t, 8, 4) \
  MACRO (16, 8, 2, __float16_t, 16, 8) \
  MACRO (32, f2, 64, __float32_t, 8, f8) \
  MACRO (32, f2, 64, __float32_t, 16, f4) \
  MACRO (32, f2, 64, __float32_t, 32, f2) \
  MACRO (32, f2, 64, __float32_t, 64, 1) \
  MACRO (32, 1, 32, __float32_t, 8, f4) \
  MACRO (32, 1, 32, __float32_t, 16, f2) \
  MACRO (32, 1, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 32, __float32_t, 64, 2) \
  MACRO (32, 2, 16, __float32_t, 8, f2) \
  MACRO (32, 2, 16, __float32_t, 16, 1) \
  MACRO (32, 2, 16, __float32_t, 32, 2) \
  MACRO (32, 2, 16, __float32_t, 64, 4) \
  MACRO (32, 4, 8, __float32_t, 8, 1) \
  MACRO (32, 4, 8, __float32_t, 16, 2) \
  MACRO (32, 4, 8, __float32_t, 32, 4) \
  MACRO (32, 4, 8, __float32_t, 64, 8) \
  MACRO (32, 8, 4, __float32_t, 8, 2) \
  MACRO (32, 8, 4, __float32_t, 16, 4) \
  MACRO (32, 8, 4, __float32_t, 32, 8) \
  MACRO (64, 1, 64, __float64_t, 8, f8) \
  MACRO (64, 1, 64, __float64_t, 16, f4) \
  MACRO (64, 1, 64, __float64_t, 32, f2) \
  MACRO (64, 1, 64, __float64_t, 64, 1) \
  MACRO (64, 2, 32, __float64_t, 8, f4) \
  MACRO (64, 2, 32, __float64_t, 16, f2) \
  MACRO (64, 2, 32, __float64_t, 32, 1) \
  MACRO (64, 2, 32, __float64_t, 64, 2) \
  MACRO (64, 4, 16, __float64_t, 8, f2) \
  MACRO (64, 4, 16, __float64_t, 16, 1) \
  MACRO (64, 4, 16, __float64_t, 32, 2) \
  MACRO (64, 4, 16, __float64_t, 64, 4) \
  MACRO (64, 8, 8, __float64_t, 8, 1) \
  MACRO (64, 8, 8, __float64_t, 16, 2) \
  MACRO (64, 8, 8, __float64_t, 32, 4) \
  MACRO (64, 8, 8, __float64_t, 64, 8) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, f4, 64, __float16_t, 8, f8, __VA_ARGS__) \
  MACRO (16, f4, 64, __float16_t, 16, f4, __VA_ARGS__) \
  MACRO (16, f4, 64, __float16_t, 32, f2, __VA_ARGS__) \
  MACRO (16, f4, 64, __float16_t, 64, 1, __VA_ARGS__) \
  MACRO (16, f2, 32, __float16_t, 8, f4, __VA_ARGS__) \
  MACRO (16, f2, 32, __float16_t, 16, f2, __VA_ARGS__) \
  MACRO (16, f2, 32, __float16_t, 32, 1, __VA_ARGS__) \
  MACRO (16, f2, 32, __float16_t, 64, 2, __VA_ARGS__) \
  MACRO (16, 1, 16, __float16_t, 8, f2, __VA_ARGS__) \
  MACRO (16, 1, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 2, 8, __float16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 2, 8, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 8, __float16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 2, 8, __float16_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 4, 4, __float16_t, 8, 2, __VA_ARGS__) \
  MACRO (16, 4, 4, __float16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, 4, 4, __float16_t, 32, 8, __VA_ARGS__) \
  MACRO (16, 8, 2, __float16_t, 8, 4, __VA_ARGS__) \
  MACRO (16, 8, 2, __float16_t, 16, 8, __VA_ARGS__) \
  MACRO (32, f2, 64, __float32_t, 8, f8, __VA_ARGS__) \
  MACRO (32, f2, 64, __float32_t, 16, f4, __VA_ARGS__) \
  MACRO (32, f2, 64, __float32_t, 32, f2, __VA_ARGS__) \
  MACRO (32, f2, 64, __float32_t, 64, 1, __VA_ARGS__) \
  MACRO (32, 1, 32, __float32_t, 8, f4, __VA_ARGS__) \
  MACRO (32, 1, 32, __float32_t, 16, f2, __VA_ARGS__) \
  MACRO (32, 1, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 2, 16, __float32_t, 8, f2, __VA_ARGS__) \
  MACRO (32, 2, 16, __float32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 2, 16, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 16, __float32_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 4, 8, __float32_t, 8, 1, __VA_ARGS__) \
  MACRO (32, 4, 8, __float32_t, 16, 2, __VA_ARGS__) \
  MACRO (32, 4, 8, __float32_t, 32, 4, __VA_ARGS__) \
  MACRO (32, 4, 8, __float32_t, 64, 8, __VA_ARGS__) \
  MACRO (32, 8, 4, __float32_t, 8, 2, __VA_ARGS__) \
  MACRO (32, 8, 4, __float32_t, 16, 4, __VA_ARGS__) \
  MACRO (32, 8, 4, __float32_t, 32, 8, __VA_ARGS__) \
  MACRO (64, 1, 64, __float64_t, 8, f8, __VA_ARGS__) \
  MACRO (64, 1, 64, __float64_t, 16, f4, __VA_ARGS__) \
  MACRO (64, 1, 64, __float64_t, 32, f2, __VA_ARGS__) \
  MACRO (64, 1, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 32, __float64_t, 8, f4, __VA_ARGS__) \
  MACRO (64, 2, 32, __float64_t, 16, f2, __VA_ARGS__) \
  MACRO (64, 2, 32, __float64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 2, 32, __float64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 4, 16, __float64_t, 8, f2, __VA_ARGS__) \
  MACRO (64, 4, 16, __float64_t, 16, 1, __VA_ARGS__) \
  MACRO (64, 4, 16, __float64_t, 32, 2, __VA_ARGS__) \
  MACRO (64, 4, 16, __float64_t, 64, 4, __VA_ARGS__) \
  MACRO (64, 8, 8, __float64_t, 8, 1, __VA_ARGS__) \
  MACRO (64, 8, 8, __float64_t, 16, 2, __VA_ARGS__) \
  MACRO (64, 8, 8, __float64_t, 32, 4, __VA_ARGS__) \
  MACRO (64, 8, 8, __float64_t, 64, 8, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, integer types, and info for
   corresponding integer and vector type.  */
#define _RVV_INT_REINT_ITERATOR(MACRO) \
  MACRO (8, f8, 64, int8_t, 8, f4) \
  MACRO (8, f8, 64, int8_t, 8, f2) \
  MACRO (8, f8, 64, int8_t, 8, 1) \
  MACRO (8, f8, 64, int8_t, 8, 2) \
  MACRO (8, f8, 64, int8_t, 8, 4) \
  MACRO (8, f8, 64, int8_t, 8, 8) \
  MACRO (8, f4, 32, int8_t, 16, f4) \
  MACRO (8, f4, 32, int8_t, 8, f8) \
  MACRO (8, f4, 32, int8_t, 8, f2) \
  MACRO (8, f4, 32, int8_t, 8, 1) \
  MACRO (8, f4, 32, int8_t, 8, 2) \
  MACRO (8, f4, 32, int8_t, 8, 4) \
  MACRO (8, f4, 32, int8_t, 8, 8) \
  MACRO (8, f2, 16, int8_t, 16, f2) \
  MACRO (8, f2, 16, int8_t, 32, f2) \
  MACRO (8, f2, 16, int8_t, 8, f8) \
  MACRO (8, f2, 16, int8_t, 8, f4) \
  MACRO (8, f2, 16, int8_t, 8, 1) \
  MACRO (8, f2, 16, int8_t, 8, 2) \
  MACRO (8, f2, 16, int8_t, 8, 4) \
  MACRO (8, f2, 16, int8_t, 8, 8) \
  MACRO (8, 1, 8, int8_t, 16, 1) \
  MACRO (8, 1, 8, int8_t, 32, 1) \
  MACRO (8, 1, 8, int8_t, 64, 1) \
  MACRO (8, 1, 8, int8_t, 8, f8) \
  MACRO (8, 1, 8, int8_t, 8, f4) \
  MACRO (8, 1, 8, int8_t, 8, f2) \
  MACRO (8, 1, 8, int8_t, 8, 2) \
  MACRO (8, 1, 8, int8_t, 8, 4) \
  MACRO (8, 1, 8, int8_t, 8, 8) \
  MACRO (8, 2, 4, int8_t, 16, 2) \
  MACRO (8, 2, 4, int8_t, 32, 2) \
  MACRO (8, 2, 4, int8_t, 64, 2) \
  MACRO (8, 2, 4, int8_t, 8, f8) \
  MACRO (8, 2, 4, int8_t, 8, f4) \
  MACRO (8, 2, 4, int8_t, 8, f2) \
  MACRO (8, 2, 4, int8_t, 8, 1) \
  MACRO (8, 2, 4, int8_t, 8, 4) \
  MACRO (8, 2, 4, int8_t, 8, 8) \
  MACRO (8, 4, 2, int8_t, 16, 4) \
  MACRO (8, 4, 2, int8_t, 32, 4) \
  MACRO (8, 4, 2, int8_t, 64, 4) \
  MACRO (8, 4, 2, int8_t, 8, f8) \
  MACRO (8, 4, 2, int8_t, 8, f4) \
  MACRO (8, 4, 2, int8_t, 8, f2) \
  MACRO (8, 4, 2, int8_t, 8, 1) \
  MACRO (8, 4, 2, int8_t, 8, 2) \
  MACRO (8, 4, 2, int8_t, 8, 8) \
  MACRO (8, 8, 1, int8_t, 16, 8) \
  MACRO (8, 8, 1, int8_t, 32, 8) \
  MACRO (8, 8, 1, int8_t, 64, 8) \
  MACRO (8, 8, 1, int8_t, 8, f8) \
  MACRO (8, 8, 1, int8_t, 8, f4) \
  MACRO (8, 8, 1, int8_t, 8, f2) \
  MACRO (8, 8, 1, int8_t, 8, 1) \
  MACRO (8, 8, 1, int8_t, 8, 2) \
  MACRO (8, 8, 1, int8_t, 8, 4) \
  MACRO (16, f4, 64, int16_t, 8, f4) \
  MACRO (16, f4, 64, int16_t, 16, f2) \
  MACRO (16, f4, 64, int16_t, 16, 1) \
  MACRO (16, f4, 64, int16_t, 16, 2) \
  MACRO (16, f4, 64, int16_t, 16, 4) \
  MACRO (16, f4, 64, int16_t, 16, 8) \
  MACRO (16, f2, 32, int16_t, 8, f2) \
  MACRO (16, f2, 32, int16_t, 32, f2) \
  MACRO (16, f2, 32, int16_t, 16, f4) \
  MACRO (16, f2, 32, int16_t, 16, 1) \
  MACRO (16, f2, 32, int16_t, 16, 2) \
  MACRO (16, f2, 32, int16_t, 16, 4) \
  MACRO (16, f2, 32, int16_t, 16, 8) \
  MACRO (16, 1, 16, int16_t, 8, 1) \
  MACRO (16, 1, 16, int16_t, 32, 1) \
  MACRO (16, 1, 16, int16_t, 64, 1) \
  MACRO (16, 1, 16, int16_t, 16, f4) \
  MACRO (16, 1, 16, int16_t, 16, f2) \
  MACRO (16, 1, 16, int16_t, 16, 2) \
  MACRO (16, 1, 16, int16_t, 16, 4) \
  MACRO (16, 1, 16, int16_t, 16, 8) \
  MACRO (16, 2, 8, int16_t, 8, 2) \
  MACRO (16, 2, 8, int16_t, 32, 2) \
  MACRO (16, 2, 8, int16_t, 64, 2) \
  MACRO (16, 2, 8, int16_t, 16, f4) \
  MACRO (16, 2, 8, int16_t, 16, f2) \
  MACRO (16, 2, 8, int16_t, 16, 1) \
  MACRO (16, 2, 8, int16_t, 16, 4) \
  MACRO (16, 2, 8, int16_t, 16, 8) \
  MACRO (16, 4, 4, int16_t, 8, 4) \
  MACRO (16, 4, 4, int16_t, 32, 4) \
  MACRO (16, 4, 4, int16_t, 64, 4) \
  MACRO (16, 4, 4, int16_t, 16, f4) \
  MACRO (16, 4, 4, int16_t, 16, f2) \
  MACRO (16, 4, 4, int16_t, 16, 1) \
  MACRO (16, 4, 4, int16_t, 16, 2) \
  MACRO (16, 4, 4, int16_t, 16, 8) \
  MACRO (16, 8, 2, int16_t, 8, 8) \
  MACRO (16, 8, 2, int16_t, 32, 8) \
  MACRO (16, 8, 2, int16_t, 64, 8) \
  MACRO (16, 8, 2, int16_t, 16, f4) \
  MACRO (16, 8, 2, int16_t, 16, f2) \
  MACRO (16, 8, 2, int16_t, 16, 1) \
  MACRO (16, 8, 2, int16_t, 16, 2) \
  MACRO (16, 8, 2, int16_t, 16, 4) \
  MACRO (32, f2, 64, int32_t, 8, f2) \
  MACRO (32, f2, 64, int32_t, 16, f2) \
  MACRO (32, f2, 64, int32_t, 32, 1) \
  MACRO (32, f2, 64, int32_t, 32, 2) \
  MACRO (32, f2, 64, int32_t, 32, 4) \
  MACRO (32, f2, 64, int32_t, 32, 8) \
  MACRO (32, 1, 32, int32_t, 8, 1) \
  MACRO (32, 1, 32, int32_t, 16, 1) \
  MACRO (32, 1, 32, int32_t, 64, 1) \
  MACRO (32, 1, 32, int32_t, 32, f2) \
  MACRO (32, 1, 32, int32_t, 32, 2) \
  MACRO (32, 1, 32, int32_t, 32, 4) \
  MACRO (32, 1, 32, int32_t, 32, 8) \
  MACRO (32, 2, 16, int32_t, 8, 2) \
  MACRO (32, 2, 16, int32_t, 16, 2) \
  MACRO (32, 2, 16, int32_t, 64, 2) \
  MACRO (32, 2, 16, int32_t, 32, f2) \
  MACRO (32, 2, 16, int32_t, 32, 1) \
  MACRO (32, 2, 16, int32_t, 32, 4) \
  MACRO (32, 2, 16, int32_t, 32, 8) \
  MACRO (32, 4, 8, int32_t, 8, 4) \
  MACRO (32, 4, 8, int32_t, 16, 4) \
  MACRO (32, 4, 8, int32_t, 64, 4) \
  MACRO (32, 4, 8, int32_t, 32, f2) \
  MACRO (32, 4, 8, int32_t, 32, 1) \
  MACRO (32, 4, 8, int32_t, 32, 2) \
  MACRO (32, 4, 8, int32_t, 32, 8) \
  MACRO (32, 8, 4, int32_t, 8, 8) \
  MACRO (32, 8, 4, int32_t, 16, 8) \
  MACRO (32, 8, 4, int32_t, 64, 8) \
  MACRO (32, 8, 4, int32_t, 32, f2) \
  MACRO (32, 8, 4, int32_t, 32, 1) \
  MACRO (32, 8, 4, int32_t, 32, 2) \
  MACRO (32, 8, 4, int32_t, 32, 4) \
  MACRO (64, 1, 64, int64_t, 8, 1) \
  MACRO (64, 1, 64, int64_t, 16, 1) \
  MACRO (64, 1, 64, int64_t, 32, 1) \
  MACRO (64, 1, 64, int64_t, 64, 2) \
  MACRO (64, 1, 64, int64_t, 64, 4) \
  MACRO (64, 1, 64, int64_t, 64, 8) \
  MACRO (64, 2, 32, int64_t, 8, 2) \
  MACRO (64, 2, 32, int64_t, 16, 2) \
  MACRO (64, 2, 32, int64_t, 32, 2) \
  MACRO (64, 2, 32, int64_t, 64, 1) \
  MACRO (64, 2, 32, int64_t, 64, 4) \
  MACRO (64, 2, 32, int64_t, 64, 8) \
  MACRO (64, 4, 16, int64_t, 8, 4) \
  MACRO (64, 4, 16, int64_t, 16, 4) \
  MACRO (64, 4, 16, int64_t, 32, 4) \
  MACRO (64, 4, 16, int64_t, 64, 1) \
  MACRO (64, 4, 16, int64_t, 64, 2) \
  MACRO (64, 4, 16, int64_t, 64, 8) \
  MACRO (64, 8, 8, int64_t, 8, 8) \
  MACRO (64, 8, 8, int64_t, 16, 8) \
  MACRO (64, 8, 8, int64_t, 32, 8) \
  MACRO (64, 8, 8, int64_t, 64, 1) \
  MACRO (64, 8, 8, int64_t, 64, 2) \
  MACRO (64, 8, 8, int64_t, 64, 4) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_REINT_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, f8, 64, int8_t, 8, f4, __VA_ARGS__) \
  MACRO (8, f8, 64, int8_t, 8, f2, __VA_ARGS__) \
  MACRO (8, f8, 64, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, f8, 64, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, f8, 64, int8_t, 8, 4, __VA_ARGS__) \
  MACRO (8, f8, 64, int8_t, 8, 8, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 16, f4, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 8, f8, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 8, f2, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 8, 4, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 8, 8, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 16, f2, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 32, f2, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 8, f8, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 8, f4, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 8, 4, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 8, 8, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 16, 1, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 32, 1, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 64, 1, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 8, f8, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 8, f4, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 8, f2, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 8, 4, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 8, 8, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 32, 2, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 64, 2, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 8, f8, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 8, f4, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 8, f2, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 8, 4, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 8, 8, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 16, 4, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 64, 4, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 8, f8, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 8, f4, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 8, f2, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 8, 8, __VA_ARGS__) \
  MACRO (8, 8, 1, int8_t, 16, 8, __VA_ARGS__) \
  MACRO (8, 8, 1, int8_t, 32, 8, __VA_ARGS__) \
  MACRO (8, 8, 1, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (8, 8, 1, int8_t, 8, f8, __VA_ARGS__) \
  MACRO (8, 8, 1, int8_t, 8, f4, __VA_ARGS__) \
  MACRO (8, 8, 1, int8_t, 8, f2, __VA_ARGS__) \
  MACRO (8, 8, 1, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 8, 1, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 8, 1, int8_t, 8, 4, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, 8, f4, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, 16, f2, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, 16, 8, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 8, f2, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 32, f2, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 16, f4, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 16, 8, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 32, 1, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 64, 1, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 16, f4, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 16, f2, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 16, 8, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 8, 2, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 64, 2, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 16, f4, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 16, f2, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 16, 8, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, 8, 4, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, 16, f4, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, 16, f2, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, 16, 8, __VA_ARGS__) \
  MACRO (16, 8, 2, int16_t, 8, 8, __VA_ARGS__) \
  MACRO (16, 8, 2, int16_t, 32, 8, __VA_ARGS__) \
  MACRO (16, 8, 2, int16_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 8, 2, int16_t, 16, f4, __VA_ARGS__) \
  MACRO (16, 8, 2, int16_t, 16, f2, __VA_ARGS__) \
  MACRO (16, 8, 2, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 8, 2, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 8, 2, int16_t, 16, 4, __VA_ARGS__) \
  MACRO (32, f2, 64, int32_t, 8, f2, __VA_ARGS__) \
  MACRO (32, f2, 64, int32_t, 16, f2, __VA_ARGS__) \
  MACRO (32, f2, 64, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, f2, 64, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, f2, 64, int32_t, 32, 4, __VA_ARGS__) \
  MACRO (32, f2, 64, int32_t, 32, 8, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, 8, 1, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, 64, 1, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, 32, f2, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, 32, 4, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, 32, 8, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, 8, 2, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, 16, 2, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, 32, f2, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, 32, 4, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, 32, 8, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, 8, 4, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, 16, 4, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, 32, f2, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, 32, 8, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, 8, 8, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, 16, 8, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, 64, 8, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, 32, f2, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, 32, 4, __VA_ARGS__) \
  MACRO (64, 1, 64, int64_t, 8, 1, __VA_ARGS__) \
  MACRO (64, 1, 64, int64_t, 16, 1, __VA_ARGS__) \
  MACRO (64, 1, 64, int64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 1, 64, int64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 1, 64, int64_t, 64, 4, __VA_ARGS__) \
  MACRO (64, 1, 64, int64_t, 64, 8, __VA_ARGS__) \
  MACRO (64, 2, 32, int64_t, 8, 2, __VA_ARGS__) \
  MACRO (64, 2, 32, int64_t, 16, 2, __VA_ARGS__) \
  MACRO (64, 2, 32, int64_t, 32, 2, __VA_ARGS__) \
  MACRO (64, 2, 32, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 32, int64_t, 64, 4, __VA_ARGS__) \
  MACRO (64, 2, 32, int64_t, 64, 8, __VA_ARGS__) \
  MACRO (64, 4, 16, int64_t, 8, 4, __VA_ARGS__) \
  MACRO (64, 4, 16, int64_t, 16, 4, __VA_ARGS__) \
  MACRO (64, 4, 16, int64_t, 32, 4, __VA_ARGS__) \
  MACRO (64, 4, 16, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 4, 16, int64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 4, 16, int64_t, 64, 8, __VA_ARGS__) \
  MACRO (64, 8, 8, int64_t, 8, 8, __VA_ARGS__) \
  MACRO (64, 8, 8, int64_t, 16, 8, __VA_ARGS__) \
  MACRO (64, 8, 8, int64_t, 32, 8, __VA_ARGS__) \
  MACRO (64, 8, 8, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 8, 8, int64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 8, 8, int64_t, 64, 4, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point types, and info for
   corresponding floating and vector type.  */
#define _RVV_FLOAT_REINT_ITERATOR(MACRO) \
  MACRO (16, f4, 64, __float16_t, 16, f2) \
  MACRO (16, f4, 64, __float16_t, 16, 1) \
  MACRO (16, f4, 64, __float16_t, 16, 2) \
  MACRO (16, f4, 64, __float16_t, 16, 4) \
  MACRO (16, f4, 64, __float16_t, 16, 8) \
  MACRO (16, f2, 32, __float16_t, 16, f4) \
  MACRO (16, f2, 32, __float16_t, 16, 1) \
  MACRO (16, f2, 32, __float16_t, 16, 2) \
  MACRO (16, f2, 32, __float16_t, 16, 4) \
  MACRO (16, f2, 32, __float16_t, 16, 8) \
  MACRO (16, 1, 16, __float16_t, 16, f4) \
  MACRO (16, 1, 16, __float16_t, 16, f2) \
  MACRO (16, 1, 16, __float16_t, 16, 2) \
  MACRO (16, 1, 16, __float16_t, 16, 4) \
  MACRO (16, 1, 16, __float16_t, 16, 8) \
  MACRO (16, 2, 8, __float16_t, 16, f4) \
  MACRO (16, 2, 8, __float16_t, 16, f2) \
  MACRO (16, 2, 8, __float16_t, 16, 1) \
  MACRO (16, 2, 8, __float16_t, 16, 4) \
  MACRO (16, 2, 8, __float16_t, 16, 8) \
  MACRO (16, 4, 4, __float16_t, 16, f4) \
  MACRO (16, 4, 4, __float16_t, 16, f2) \
  MACRO (16, 4, 4, __float16_t, 16, 1) \
  MACRO (16, 4, 4, __float16_t, 16, 2) \
  MACRO (16, 4, 4, __float16_t, 16, 8) \
  MACRO (16, 8, 2, __float16_t, 16, f4) \
  MACRO (16, 8, 2, __float16_t, 16, f2) \
  MACRO (16, 8, 2, __float16_t, 16, 1) \
  MACRO (16, 8, 2, __float16_t, 16, 2) \
  MACRO (16, 8, 2, __float16_t, 16, 4) \
  MACRO (32, f2, 64, __float32_t, 32, 1) \
  MACRO (32, f2, 64, __float32_t, 32, 2) \
  MACRO (32, f2, 64, __float32_t, 32, 4) \
  MACRO (32, f2, 64, __float32_t, 32, 8) \
  MACRO (32, 1, 32, __float32_t, 32, f2) \
  MACRO (32, 1, 32, __float32_t, 32, 2) \
  MACRO (32, 1, 32, __float32_t, 32, 4) \
  MACRO (32, 1, 32, __float32_t, 32, 8) \
  MACRO (32, 2, 16, __float32_t, 32, f2) \
  MACRO (32, 2, 16, __float32_t, 32, 1) \
  MACRO (32, 2, 16, __float32_t, 32, 4) \
  MACRO (32, 2, 16, __float32_t, 32, 8) \
  MACRO (32, 4, 8, __float32_t, 32, f2) \
  MACRO (32, 4, 8, __float32_t, 32, 1) \
  MACRO (32, 4, 8, __float32_t, 32, 2) \
  MACRO (32, 4, 8, __float32_t, 32, 8) \
  MACRO (32, 8, 4, __float32_t, 32, f2) \
  MACRO (32, 8, 4, __float32_t, 32, 1) \
  MACRO (32, 8, 4, __float32_t, 32, 2) \
  MACRO (32, 8, 4, __float32_t, 32, 4) \
  MACRO (64, 1, 64, __float64_t, 64, 2) \
  MACRO (64, 1, 64, __float64_t, 64, 4) \
  MACRO (64, 1, 64, __float64_t, 64, 8) \
  MACRO (64, 2, 32, __float64_t, 64, 1) \
  MACRO (64, 2, 32, __float64_t, 64, 4) \
  MACRO (64, 2, 32, __float64_t, 64, 8) \
  MACRO (64, 4, 16, __float64_t, 64, 1) \
  MACRO (64, 4, 16, __float64_t, 64, 2) \
  MACRO (64, 4, 16, __float64_t, 64, 8) \
  MACRO (64, 8, 8, __float64_t, 64, 1) \
  MACRO (64, 8, 8, __float64_t, 64, 2) \
  MACRO (64, 8, 8, __float64_t, 64, 4) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_REINT_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, f4, 64, __float16_t, 16, f2, __VA_ARGS__) \
  MACRO (16, f4, 64, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, f4, 64, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, f4, 64, __float16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, f4, 64, __float16_t, 16, 8, __VA_ARGS__) \
  MACRO (16, f2, 32, __float16_t, 16, f4, __VA_ARGS__) \
  MACRO (16, f2, 32, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, f2, 32, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, f2, 32, __float16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, f2, 32, __float16_t, 16, 8, __VA_ARGS__) \
  MACRO (16, 1, 16, __float16_t, 16, f4, __VA_ARGS__) \
  MACRO (16, 1, 16, __float16_t, 16, f2, __VA_ARGS__) \
  MACRO (16, 1, 16, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 1, 16, __float16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, 1, 16, __float16_t, 16, 8, __VA_ARGS__) \
  MACRO (16, 2, 8, __float16_t, 16, f4, __VA_ARGS__) \
  MACRO (16, 2, 8, __float16_t, 16, f2, __VA_ARGS__) \
  MACRO (16, 2, 8, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 2, 8, __float16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, 2, 8, __float16_t, 16, 8, __VA_ARGS__) \
  MACRO (16, 4, 4, __float16_t, 16, f4, __VA_ARGS__) \
  MACRO (16, 4, 4, __float16_t, 16, f2, __VA_ARGS__) \
  MACRO (16, 4, 4, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 4, 4, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 4, 4, __float16_t, 16, 8, __VA_ARGS__) \
  MACRO (16, 8, 2, __float16_t, 16, f4, __VA_ARGS__) \
  MACRO (16, 8, 2, __float16_t, 16, f2, __VA_ARGS__) \
  MACRO (16, 8, 2, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 8, 2, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 8, 2, __float16_t, 16, 4, __VA_ARGS__) \
  MACRO (32, f2, 64, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, f2, 64, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, f2, 64, __float32_t, 32, 4, __VA_ARGS__) \
  MACRO (32, f2, 64, __float32_t, 32, 8, __VA_ARGS__) \
  MACRO (32, 1, 32, __float32_t, 32, f2, __VA_ARGS__) \
  MACRO (32, 1, 32, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 1, 32, __float32_t, 32, 4, __VA_ARGS__) \
  MACRO (32, 1, 32, __float32_t, 32, 8, __VA_ARGS__) \
  MACRO (32, 2, 16, __float32_t, 32, f2, __VA_ARGS__) \
  MACRO (32, 2, 16, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 2, 16, __float32_t, 32, 4, __VA_ARGS__) \
  MACRO (32, 2, 16, __float32_t, 32, 8, __VA_ARGS__) \
  MACRO (32, 4, 8, __float32_t, 32, f2, __VA_ARGS__) \
  MACRO (32, 4, 8, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 4, 8, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 4, 8, __float32_t, 32, 8, __VA_ARGS__) \
  MACRO (32, 8, 4, __float32_t, 32, f2, __VA_ARGS__) \
  MACRO (32, 8, 4, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 8, 4, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 8, 4, __float32_t, 32, 4, __VA_ARGS__) \
  MACRO (64, 1, 64, __float64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 1, 64, __float64_t, 64, 4, __VA_ARGS__) \
  MACRO (64, 1, 64, __float64_t, 64, 8, __VA_ARGS__) \
  MACRO (64, 2, 32, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 32, __float64_t, 64, 4, __VA_ARGS__) \
  MACRO (64, 2, 32, __float64_t, 64, 8, __VA_ARGS__) \
  MACRO (64, 4, 16, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 4, 16, __float64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 4, 16, __float64_t, 64, 8, __VA_ARGS__) \
  MACRO (64, 8, 8, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 8, 8, __float64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 8, 8, __float64_t, 64, 4, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, integer types, and info for
   corresponding widening vector LMUL.  */
#define _RVV_INT_WLMUL_ITERATOR(MACRO) \
  MACRO (8, 2, 1, 8, int8_t) \
  MACRO (8, 4, 2, 4, int8_t) \
  MACRO (8, 8, 4, 2, int8_t) \
  MACRO (16, 2, 1, 16, int16_t) \
  MACRO (16, 4, 2, 8, int16_t) \
  MACRO (16, 8, 4, 4, int16_t) \
  MACRO (32, 2, 1, 32, int32_t) \
  MACRO (32, 4, 2, 16, int32_t) \
  MACRO (32, 8, 4, 8, int32_t) \
  MACRO (64, 2, 1, 64, int64_t) \
  MACRO (64, 4, 2, 32, int64_t) \
  MACRO (64, 8, 4, 16, int64_t) \
  MACRO (8, 4, 1, 8, int8_t) \
  MACRO (8, 8, 2, 4, int8_t) \
  MACRO (16, 4, 1, 16, int16_t) \
  MACRO (16, 8, 2, 8, int16_t) \
  MACRO (32, 4, 1, 32, int32_t) \
  MACRO (32, 8, 2, 16, int32_t) \
  MACRO (64, 4, 1, 64, int64_t) \
  MACRO (64, 8, 2, 32, int64_t) \
  MACRO (8, 8, 1, 8, int8_t) \
  MACRO (16, 8, 1, 16, int16_t) \
  MACRO (32, 8, 1, 32, int32_t) \
  MACRO (64, 8, 1, 64, int64_t) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, float types, and info for
   corresponding widening vector LMUL.  */
#define _RVV_FLOAT_WLMUL_ITERATOR(MACRO) \
  MACRO (16, 2, 1, 16, __float16_t) \
  MACRO (16, 4, 2, 8, __float16_t) \
  MACRO (16, 8, 4, 4, __float16_t) \
  MACRO (32, 2, 1, 32, __float32_t) \
  MACRO (32, 4, 2, 16, __float32_t) \
  MACRO (32, 8, 4, 8, __float32_t) \
  MACRO (64, 2, 1, 64, __float64_t) \
  MACRO (64, 4, 2, 32, __float64_t) \
  MACRO (64, 8, 4, 16, __float64_t) \
  MACRO (16, 4, 1, 16, __float16_t) \
  MACRO (16, 8, 2, 8, __float16_t) \
  MACRO (32, 4, 1, 32, __float32_t) \
  MACRO (32, 8, 2, 16, __float32_t) \
  MACRO (64, 4, 1, 64, __float64_t) \
  MACRO (64, 8, 2, 32, __float64_t) \
  MACRO (16, 8, 1, 16, __float16_t) \
  MACRO (32, 8, 1, 32, __float32_t) \
  MACRO (64, 8, 1, 64, __float64_t) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_ITERATOR(MACRO) \
  MACRO (8, 1, 2, 8, int8_t) \
  MACRO (8, 1, 3, 8, int8_t) \
  MACRO (8, 1, 4, 8, int8_t) \
  MACRO (8, 1, 5, 8, int8_t) \
  MACRO (8, 1, 6, 8, int8_t) \
  MACRO (8, 1, 7, 8, int8_t) \
  MACRO (8, 1, 8, 8, int8_t) \
  MACRO (8, 2, 2, 4, int8_t) \
  MACRO (8, 2, 3, 4, int8_t) \
  MACRO (8, 2, 4, 4, int8_t) \
  MACRO (8, 4, 2, 2, int8_t) \
  MACRO (16, 1, 2, 16, int16_t) \
  MACRO (16, 1, 3, 16, int16_t) \
  MACRO (16, 1, 4, 16, int16_t) \
  MACRO (16, 1, 5, 16, int16_t) \
  MACRO (16, 1, 6, 16, int16_t) \
  MACRO (16, 1, 7, 16, int16_t) \
  MACRO (16, 1, 8, 16, int16_t) \
  MACRO (16, 2, 2, 8, int16_t) \
  MACRO (16, 2, 3, 8, int16_t) \
  MACRO (16, 2, 4, 8, int16_t) \
  MACRO (16, 4, 2, 4, int16_t) \
  MACRO (32, 1, 2, 32, int32_t) \
  MACRO (32, 1, 3, 32, int32_t) \
  MACRO (32, 1, 4, 32, int32_t) \
  MACRO (32, 1, 5, 32, int32_t) \
  MACRO (32, 1, 6, 32, int32_t) \
  MACRO (32, 1, 7, 32, int32_t) \
  MACRO (32, 1, 8, 32, int32_t) \
  MACRO (32, 2, 2, 16, int32_t) \
  MACRO (32, 2, 3, 16, int32_t) \
  MACRO (32, 2, 4, 16, int32_t) \
  MACRO (32, 4, 2, 8, int32_t) \
  MACRO (64, 1, 2, 64, int64_t) \
  MACRO (64, 1, 3, 64, int64_t) \
  MACRO (64, 1, 4, 64, int64_t) \
  MACRO (64, 1, 5, 64, int64_t) \
  MACRO (64, 1, 6, 64, int64_t) \
  MACRO (64, 1, 7, 64, int64_t) \
  MACRO (64, 1, 8, 64, int64_t) \
  MACRO (64, 2, 2, 32, int64_t) \
  MACRO (64, 2, 3, 32, int64_t) \
  MACRO (64, 2, 4, 32, int64_t) \
  MACRO (64, 4, 2, 16, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 2, 8, int8_t, __VA_ARGS__) \
  MACRO (8, 1, 3, 8, int8_t, __VA_ARGS__) \
  MACRO (8, 1, 4, 8, int8_t, __VA_ARGS__) \
  MACRO (8, 1, 5, 8, int8_t, __VA_ARGS__) \
  MACRO (8, 1, 6, 8, int8_t, __VA_ARGS__) \
  MACRO (8, 1, 7, 8, int8_t, __VA_ARGS__) \
  MACRO (8, 1, 8, 8, int8_t, __VA_ARGS__) \
  MACRO (8, 2, 2, 4, int8_t, __VA_ARGS__) \
  MACRO (8, 2, 3, 4, int8_t, __VA_ARGS__) \
  MACRO (8, 2, 4, 4, int8_t, __VA_ARGS__) \
  MACRO (8, 4, 2, 2, int8_t, __VA_ARGS__) \
  MACRO (16, 1, 2, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, int16_t, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_INDEX_ITERATOR(MACRO) \
  MACRO (8, 1, 2, 8, int8_t, 8, 1) \
  MACRO (8, 1, 2, 8, int8_t, 16, 2) \
  MACRO (8, 1, 2, 8, int8_t, 32, 4) \
  MACRO (8, 1, 2, 8, int8_t, 64, 8) \
  MACRO (8, 1, 3, 8, int8_t, 8, 1) \
  MACRO (8, 1, 3, 8, int8_t, 16, 2) \
  MACRO (8, 1, 3, 8, int8_t, 32, 4) \
  MACRO (8, 1, 3, 8, int8_t, 64, 8) \
  MACRO (8, 1, 4, 8, int8_t, 8, 1) \
  MACRO (8, 1, 4, 8, int8_t, 16, 2) \
  MACRO (8, 1, 4, 8, int8_t, 32, 4) \
  MACRO (8, 1, 4, 8, int8_t, 64, 8) \
  MACRO (8, 1, 5, 8, int8_t, 8, 1) \
  MACRO (8, 1, 5, 8, int8_t, 16, 2) \
  MACRO (8, 1, 5, 8, int8_t, 32, 4) \
  MACRO (8, 1, 5, 8, int8_t, 64, 8) \
  MACRO (8, 1, 6, 8, int8_t, 8, 1) \
  MACRO (8, 1, 6, 8, int8_t, 16, 2) \
  MACRO (8, 1, 6, 8, int8_t, 32, 4) \
  MACRO (8, 1, 6, 8, int8_t, 64, 8) \
  MACRO (8, 1, 7, 8, int8_t, 8, 1) \
  MACRO (8, 1, 7, 8, int8_t, 16, 2) \
  MACRO (8, 1, 7, 8, int8_t, 32, 4) \
  MACRO (8, 1, 7, 8, int8_t, 64, 8) \
  MACRO (8, 1, 8, 8, int8_t, 8, 1) \
  MACRO (8, 1, 8, 8, int8_t, 16, 2) \
  MACRO (8, 1, 8, 8, int8_t, 32, 4) \
  MACRO (8, 1, 8, 8, int8_t, 64, 8) \
  MACRO (8, 2, 2, 4, int8_t, 8, 2) \
  MACRO (8, 2, 2, 4, int8_t, 16, 4) \
  MACRO (8, 2, 2, 4, int8_t, 32, 8) \
  MACRO (8, 2, 3, 4, int8_t, 8, 2) \
  MACRO (8, 2, 3, 4, int8_t, 16, 4) \
  MACRO (8, 2, 3, 4, int8_t, 32, 8) \
  MACRO (8, 2, 4, 4, int8_t, 8, 2) \
  MACRO (8, 2, 4, 4, int8_t, 16, 4) \
  MACRO (8, 2, 4, 4, int8_t, 32, 8) \
  MACRO (8, 4, 2, 2, int8_t, 8, 4) \
  MACRO (8, 4, 2, 2, int8_t, 16, 8) \
  MACRO (16, 1, 2, 16, int16_t, 16, 1) \
  MACRO (16, 1, 2, 16, int16_t, 32, 2) \
  MACRO (16, 1, 2, 16, int16_t, 64, 4) \
  MACRO (16, 1, 3, 16, int16_t, 16, 1) \
  MACRO (16, 1, 3, 16, int16_t, 32, 2) \
  MACRO (16, 1, 3, 16, int16_t, 64, 4) \
  MACRO (16, 1, 4, 16, int16_t, 16, 1) \
  MACRO (16, 1, 4, 16, int16_t, 32, 2) \
  MACRO (16, 1, 4, 16, int16_t, 64, 4) \
  MACRO (16, 1, 5, 16, int16_t, 16, 1) \
  MACRO (16, 1, 5, 16, int16_t, 32, 2) \
  MACRO (16, 1, 5, 16, int16_t, 64, 4) \
  MACRO (16, 1, 6, 16, int16_t, 16, 1) \
  MACRO (16, 1, 6, 16, int16_t, 32, 2) \
  MACRO (16, 1, 6, 16, int16_t, 64, 4) \
  MACRO (16, 1, 7, 16, int16_t, 16, 1) \
  MACRO (16, 1, 7, 16, int16_t, 32, 2) \
  MACRO (16, 1, 7, 16, int16_t, 64, 4) \
  MACRO (16, 1, 8, 16, int16_t, 16, 1) \
  MACRO (16, 1, 8, 16, int16_t, 32, 2) \
  MACRO (16, 1, 8, 16, int16_t, 64, 4) \
  MACRO (16, 2, 2, 8, int16_t, 8, 1) \
  MACRO (16, 2, 2, 8, int16_t, 16, 2) \
  MACRO (16, 2, 2, 8, int16_t, 32, 4) \
  MACRO (16, 2, 2, 8, int16_t, 64, 8) \
  MACRO (16, 2, 3, 8, int16_t, 8, 1) \
  MACRO (16, 2, 3, 8, int16_t, 16, 2) \
  MACRO (16, 2, 3, 8, int16_t, 32, 4) \
  MACRO (16, 2, 3, 8, int16_t, 64, 8) \
  MACRO (16, 2, 4, 8, int16_t, 8, 1) \
  MACRO (16, 2, 4, 8, int16_t, 16, 2) \
  MACRO (16, 2, 4, 8, int16_t, 32, 4) \
  MACRO (16, 2, 4, 8, int16_t, 64, 8) \
  MACRO (16, 4, 2, 4, int16_t, 8, 2) \
  MACRO (16, 4, 2, 4, int16_t, 16, 4) \
  MACRO (16, 4, 2, 4, int16_t, 32, 8) \
  MACRO (32, 1, 2, 32, int32_t, 32, 1) \
  MACRO (32, 1, 2, 32, int32_t, 64, 2) \
  MACRO (32, 1, 3, 32, int32_t, 32, 1) \
  MACRO (32, 1, 3, 32, int32_t, 64, 2) \
  MACRO (32, 1, 4, 32, int32_t, 32, 1) \
  MACRO (32, 1, 4, 32, int32_t, 64, 2) \
  MACRO (32, 1, 5, 32, int32_t, 32, 1) \
  MACRO (32, 1, 5, 32, int32_t, 64, 2) \
  MACRO (32, 1, 6, 32, int32_t, 32, 1) \
  MACRO (32, 1, 6, 32, int32_t, 64, 2) \
  MACRO (32, 1, 7, 32, int32_t, 32, 1) \
  MACRO (32, 1, 7, 32, int32_t, 64, 2) \
  MACRO (32, 1, 8, 32, int32_t, 32, 1) \
  MACRO (32, 1, 8, 32, int32_t, 64, 2) \
  MACRO (32, 2, 2, 16, int32_t, 16, 1) \
  MACRO (32, 2, 2, 16, int32_t, 32, 2) \
  MACRO (32, 2, 2, 16, int32_t, 64, 4) \
  MACRO (32, 2, 3, 16, int32_t, 16, 1) \
  MACRO (32, 2, 3, 16, int32_t, 32, 2) \
  MACRO (32, 2, 3, 16, int32_t, 64, 4) \
  MACRO (32, 2, 4, 16, int32_t, 16, 1) \
  MACRO (32, 2, 4, 16, int32_t, 32, 2) \
  MACRO (32, 2, 4, 16, int32_t, 64, 4) \
  MACRO (32, 4, 2, 8, int32_t, 8, 1) \
  MACRO (32, 4, 2, 8, int32_t, 16, 2) \
  MACRO (32, 4, 2, 8, int32_t, 32, 4) \
  MACRO (32, 4, 2, 8, int32_t, 64, 8) \
  MACRO (64, 1, 2, 64, int64_t, 64, 1) \
  MACRO (64, 1, 3, 64, int64_t, 64, 1) \
  MACRO (64, 1, 4, 64, int64_t, 64, 1) \
  MACRO (64, 1, 5, 64, int64_t, 64, 1) \
  MACRO (64, 1, 6, 64, int64_t, 64, 1) \
  MACRO (64, 1, 7, 64, int64_t, 64, 1) \
  MACRO (64, 1, 8, 64, int64_t, 64, 1) \
  MACRO (64, 2, 2, 32, int64_t, 32, 1) \
  MACRO (64, 2, 2, 32, int64_t, 64, 2) \
  MACRO (64, 2, 3, 32, int64_t, 32, 1) \
  MACRO (64, 2, 3, 32, int64_t, 64, 2) \
  MACRO (64, 2, 4, 32, int64_t, 32, 1) \
  MACRO (64, 2, 4, 32, int64_t, 64, 2) \
  MACRO (64, 4, 2, 16, int64_t, 16, 1) \
  MACRO (64, 4, 2, 16, int64_t, 32, 2) \
  MACRO (64, 4, 2, 16, int64_t, 64, 4) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 2, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 2, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 2, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 2, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (8, 1, 3, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 3, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 3, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 3, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (8, 1, 4, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 4, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 4, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 4, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (8, 1, 5, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 5, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 5, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 5, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (8, 1, 6, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 6, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 6, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 6, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (8, 1, 7, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 7, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 7, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 7, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (8, 1, 8, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 8, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 8, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 8, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (8, 2, 2, 4, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 2, 2, 4, int8_t, 16, 4, __VA_ARGS__) \
  MACRO (8, 2, 2, 4, int8_t, 32, 8, __VA_ARGS__) \
  MACRO (8, 2, 3, 4, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 2, 3, 4, int8_t, 16, 4, __VA_ARGS__) \
  MACRO (8, 2, 3, 4, int8_t, 32, 8, __VA_ARGS__) \
  MACRO (8, 2, 4, 4, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 2, 4, 4, int8_t, 16, 4, __VA_ARGS__) \
  MACRO (8, 2, 4, 4, int8_t, 32, 8, __VA_ARGS__) \
  MACRO (8, 4, 2, 2, int8_t, 8, 4, __VA_ARGS__) \
  MACRO (8, 4, 2, 2, int8_t, 16, 8, __VA_ARGS__) \
  MACRO (16, 1, 2, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 2, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 2, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, int16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, int16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, int16_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, int16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, int16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, int16_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, int16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, int16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, int16_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, int16_t, 8, 2, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, int16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, int16_t, 32, 8, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, int32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, int32_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, int32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, int32_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, int32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, int32_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, 8, 1, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, 16, 2, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, 32, 4, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, 64, 8, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, int64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, int64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, int64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, int64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, int64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, int64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, int64_t, 16, 1, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, int64_t, 32, 2, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, int64_t, 64, 4, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF2_ITERATOR(MACRO) \
  MACRO (8, 1, 2, 8, int8_t) \
  MACRO (8, 2, 2, 4, int8_t) \
  MACRO (8, 4, 2, 2, int8_t) \
  MACRO (16, 1, 2, 16, int16_t) \
  MACRO (16, 2, 2, 8, int16_t) \
  MACRO (16, 4, 2, 4, int16_t) \
  MACRO (32, 1, 2, 32, int32_t) \
  MACRO (32, 2, 2, 16, int32_t) \
  MACRO (32, 4, 2, 8, int32_t) \
  MACRO (64, 1, 2, 64, int64_t) \
  MACRO (64, 2, 2, 32, int64_t) \
  MACRO (64, 4, 2, 16, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF2_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 2, 8, int8_t, __VA_ARGS__) \
  MACRO (8, 2, 2, 4, int8_t, __VA_ARGS__) \
  MACRO (8, 4, 2, 2, int8_t, __VA_ARGS__) \
  MACRO (16, 1, 2, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, int16_t, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF3_ITERATOR(MACRO) \
  MACRO (8, 1, 3, 8, int8_t) \
  MACRO (8, 2, 3, 4, int8_t) \
  MACRO (16, 1, 3, 16, int16_t) \
  MACRO (16, 2, 3, 8, int16_t) \
  MACRO (32, 1, 3, 32, int32_t) \
  MACRO (32, 2, 3, 16, int32_t) \
  MACRO (64, 1, 3, 64, int64_t) \
  MACRO (64, 2, 3, 32, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF3_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 3, 8, int8_t, __VA_ARGS__) \
  MACRO (8, 2, 3, 4, int8_t, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF4_ITERATOR(MACRO) \
  MACRO (8, 1, 4, 8, int8_t) \
  MACRO (8, 2, 4, 4, int8_t) \
  MACRO (16, 1, 4, 16, int16_t) \
  MACRO (16, 2, 4, 8, int16_t) \
  MACRO (32, 1, 4, 32, int32_t) \
  MACRO (32, 2, 4, 16, int32_t) \
  MACRO (64, 1, 4, 64, int64_t) \
  MACRO (64, 2, 4, 32, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF4_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 4, 8, int8_t, __VA_ARGS__) \
  MACRO (8, 2, 4, 4, int8_t, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF5_ITERATOR(MACRO) \
  MACRO (8, 1, 5, 8, int8_t) \
  MACRO (16, 1, 5, 16, int16_t) \
  MACRO (32, 1, 5, 32, int32_t) \
  MACRO (64, 1, 5, 64, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF5_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 5, 8, int8_t, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF6_ITERATOR(MACRO) \
  MACRO (8, 1, 6, 8, int8_t) \
  MACRO (16, 1, 6, 16, int16_t) \
  MACRO (32, 1, 6, 32, int32_t) \
  MACRO (64, 1, 6, 64, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF6_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 6, 8, int8_t, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF7_ITERATOR(MACRO) \
  MACRO (8, 1, 7, 8, int8_t) \
  MACRO (16, 1, 7, 16, int16_t) \
  MACRO (32, 1, 7, 32, int32_t) \
  MACRO (64, 1, 7, 64, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF7_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 7, 8, int8_t, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF8_ITERATOR(MACRO) \
  MACRO (8, 1, 8, 8, int8_t) \
  MACRO (16, 1, 8, 16, int16_t) \
  MACRO (32, 1, 8, 32, int32_t) \
  MACRO (64, 1, 8, 64, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF8_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 8, 8, int8_t, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF2_INDEX_ITERATOR(MACRO) \
  MACRO (8, 1, 2, 8, int8_t, 8, 1) \
  MACRO (8, 1, 2, 8, int8_t, 16, 2) \
  MACRO (8, 1, 2, 8, int8_t, 32, 4) \
  MACRO (8, 1, 2, 8, int8_t, 64, 8) \
  MACRO (8, 2, 2, 4, int8_t, 8, 2) \
  MACRO (8, 2, 2, 4, int8_t, 16, 4) \
  MACRO (8, 2, 2, 4, int8_t, 32, 8) \
  MACRO (8, 4, 2, 2, int8_t, 8, 4) \
  MACRO (8, 4, 2, 2, int8_t, 16, 8) \
  MACRO (16, 1, 2, 16, int16_t, 16, 1) \
  MACRO (16, 1, 2, 16, int16_t, 32, 2) \
  MACRO (16, 1, 2, 16, int16_t, 64, 4) \
  MACRO (16, 2, 2, 8, int16_t, 8, 1) \
  MACRO (16, 2, 2, 8, int16_t, 16, 2) \
  MACRO (16, 2, 2, 8, int16_t, 32, 4) \
  MACRO (16, 2, 2, 8, int16_t, 64, 8) \
  MACRO (16, 4, 2, 4, int16_t, 8, 2) \
  MACRO (16, 4, 2, 4, int16_t, 16, 4) \
  MACRO (16, 4, 2, 4, int16_t, 32, 8) \
  MACRO (32, 1, 2, 32, int32_t, 32, 1) \
  MACRO (32, 1, 2, 32, int32_t, 64, 2) \
  MACRO (32, 2, 2, 16, int32_t, 16, 1) \
  MACRO (32, 2, 2, 16, int32_t, 32, 2) \
  MACRO (32, 2, 2, 16, int32_t, 64, 4) \
  MACRO (32, 4, 2, 8, int32_t, 8, 1) \
  MACRO (32, 4, 2, 8, int32_t, 16, 2) \
  MACRO (32, 4, 2, 8, int32_t, 32, 4) \
  MACRO (32, 4, 2, 8, int32_t, 64, 8) \
  MACRO (64, 1, 2, 64, int64_t, 64, 1) \
  MACRO (64, 2, 2, 32, int64_t, 32, 1) \
  MACRO (64, 2, 2, 32, int64_t, 64, 2) \
  MACRO (64, 4, 2, 16, int64_t, 16, 1) \
  MACRO (64, 4, 2, 16, int64_t, 32, 2) \
  MACRO (64, 4, 2, 16, int64_t, 64, 4) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF2_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 2, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 2, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 2, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 2, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (8, 2, 2, 4, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 2, 2, 4, int8_t, 16, 4, __VA_ARGS__) \
  MACRO (8, 2, 2, 4, int8_t, 32, 8, __VA_ARGS__) \
  MACRO (8, 4, 2, 2, int8_t, 8, 4, __VA_ARGS__) \
  MACRO (8, 4, 2, 2, int8_t, 16, 8, __VA_ARGS__) \
  MACRO (16, 1, 2, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 2, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 2, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, int16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, int16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, int16_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, int16_t, 8, 2, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, int16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, int16_t, 32, 8, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, int32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, int32_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, 8, 1, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, 16, 2, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, 32, 4, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, 64, 8, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, int64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, int64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, int64_t, 16, 1, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, int64_t, 32, 2, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, int64_t, 64, 4, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF3_INDEX_ITERATOR(MACRO) \
  MACRO (8, 1, 3, 8, int8_t, 8, 1) \
  MACRO (8, 1, 3, 8, int8_t, 16, 2) \
  MACRO (8, 1, 3, 8, int8_t, 32, 4) \
  MACRO (8, 1, 3, 8, int8_t, 64, 8) \
  MACRO (8, 2, 3, 4, int8_t, 8, 2) \
  MACRO (8, 2, 3, 4, int8_t, 16, 4) \
  MACRO (8, 2, 3, 4, int8_t, 32, 8) \
  MACRO (16, 1, 3, 16, int16_t, 16, 1) \
  MACRO (16, 1, 3, 16, int16_t, 32, 2) \
  MACRO (16, 1, 3, 16, int16_t, 64, 4) \
  MACRO (16, 2, 3, 8, int16_t, 8, 1) \
  MACRO (16, 2, 3, 8, int16_t, 16, 2) \
  MACRO (16, 2, 3, 8, int16_t, 32, 4) \
  MACRO (16, 2, 3, 8, int16_t, 64, 8) \
  MACRO (32, 1, 3, 32, int32_t, 32, 1) \
  MACRO (32, 1, 3, 32, int32_t, 64, 2) \
  MACRO (32, 2, 3, 16, int32_t, 16, 1) \
  MACRO (32, 2, 3, 16, int32_t, 32, 2) \
  MACRO (32, 2, 3, 16, int32_t, 64, 4) \
  MACRO (64, 1, 3, 64, int64_t, 64, 1) \
  MACRO (64, 2, 3, 32, int64_t, 32, 1) \
  MACRO (64, 2, 3, 32, int64_t, 64, 2) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF3_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 3, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 3, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 3, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 3, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (8, 2, 3, 4, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 2, 3, 4, int8_t, 16, 4, __VA_ARGS__) \
  MACRO (8, 2, 3, 4, int8_t, 32, 8, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, int16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, int16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, int16_t, 64, 8, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, int32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, int32_t, 64, 4, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, int64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, int64_t, 64, 2, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF4_INDEX_ITERATOR(MACRO) \
  MACRO (8, 1, 4, 8, int8_t, 8, 1) \
  MACRO (8, 1, 4, 8, int8_t, 16, 2) \
  MACRO (8, 1, 4, 8, int8_t, 32, 4) \
  MACRO (8, 1, 4, 8, int8_t, 64, 8) \
  MACRO (8, 2, 4, 4, int8_t, 8, 2) \
  MACRO (8, 2, 4, 4, int8_t, 16, 4) \
  MACRO (8, 2, 4, 4, int8_t, 32, 8) \
  MACRO (16, 1, 4, 16, int16_t, 16, 1) \
  MACRO (16, 1, 4, 16, int16_t, 32, 2) \
  MACRO (16, 1, 4, 16, int16_t, 64, 4) \
  MACRO (16, 2, 4, 8, int16_t, 8, 1) \
  MACRO (16, 2, 4, 8, int16_t, 16, 2) \
  MACRO (16, 2, 4, 8, int16_t, 32, 4) \
  MACRO (16, 2, 4, 8, int16_t, 64, 8) \
  MACRO (32, 1, 4, 32, int32_t, 32, 1) \
  MACRO (32, 1, 4, 32, int32_t, 64, 2) \
  MACRO (32, 2, 4, 16, int32_t, 16, 1) \
  MACRO (32, 2, 4, 16, int32_t, 32, 2) \
  MACRO (32, 2, 4, 16, int32_t, 64, 4) \
  MACRO (64, 1, 4, 64, int64_t, 64, 1) \
  MACRO (64, 2, 4, 32, int64_t, 32, 1) \
  MACRO (64, 2, 4, 32, int64_t, 64, 2) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF4_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 4, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 4, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 4, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 4, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (8, 2, 4, 4, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 2, 4, 4, int8_t, 16, 4, __VA_ARGS__) \
  MACRO (8, 2, 4, 4, int8_t, 32, 8, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, int16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, int16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, int16_t, 64, 8, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, int32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, int32_t, 64, 4, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, int64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, int64_t, 64, 2, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF5_INDEX_ITERATOR(MACRO) \
  MACRO (8, 1, 5, 8, int8_t, 8, 1) \
  MACRO (8, 1, 5, 8, int8_t, 16, 2) \
  MACRO (8, 1, 5, 8, int8_t, 32, 4) \
  MACRO (8, 1, 5, 8, int8_t, 64, 8) \
  MACRO (16, 1, 5, 16, int16_t, 16, 1) \
  MACRO (16, 1, 5, 16, int16_t, 32, 2) \
  MACRO (16, 1, 5, 16, int16_t, 64, 4) \
  MACRO (32, 1, 5, 32, int32_t, 32, 1) \
  MACRO (32, 1, 5, 32, int32_t, 64, 2) \
  MACRO (64, 1, 5, 64, int64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF5_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 5, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 5, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 5, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 5, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, int64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF6_INDEX_ITERATOR(MACRO) \
  MACRO (8, 1, 6, 8, int8_t, 8, 1) \
  MACRO (8, 1, 6, 8, int8_t, 16, 2) \
  MACRO (8, 1, 6, 8, int8_t, 32, 4) \
  MACRO (8, 1, 6, 8, int8_t, 64, 8) \
  MACRO (16, 1, 6, 16, int16_t, 16, 1) \
  MACRO (16, 1, 6, 16, int16_t, 32, 2) \
  MACRO (16, 1, 6, 16, int16_t, 64, 4) \
  MACRO (32, 1, 6, 32, int32_t, 32, 1) \
  MACRO (32, 1, 6, 32, int32_t, 64, 2) \
  MACRO (64, 1, 6, 64, int64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF6_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 6, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 6, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 6, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 6, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, int64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF7_INDEX_ITERATOR(MACRO) \
  MACRO (8, 1, 7, 8, int8_t, 8, 1) \
  MACRO (8, 1, 7, 8, int8_t, 16, 2) \
  MACRO (8, 1, 7, 8, int8_t, 32, 4) \
  MACRO (8, 1, 7, 8, int8_t, 64, 8) \
  MACRO (16, 1, 7, 16, int16_t, 16, 1) \
  MACRO (16, 1, 7, 16, int16_t, 32, 2) \
  MACRO (16, 1, 7, 16, int16_t, 64, 4) \
  MACRO (32, 1, 7, 32, int32_t, 32, 1) \
  MACRO (32, 1, 7, 32, int32_t, 64, 2) \
  MACRO (64, 1, 7, 64, int64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF7_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 7, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 7, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 7, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 7, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, int64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF8_INDEX_ITERATOR(MACRO) \
  MACRO (8, 1, 8, 8, int8_t, 8, 1) \
  MACRO (8, 1, 8, 8, int8_t, 16, 2) \
  MACRO (8, 1, 8, 8, int8_t, 32, 4) \
  MACRO (8, 1, 8, 8, int8_t, 64, 8) \
  MACRO (16, 1, 8, 16, int16_t, 16, 1) \
  MACRO (16, 1, 8, 16, int16_t, 32, 2) \
  MACRO (16, 1, 8, 16, int16_t, 64, 4) \
  MACRO (32, 1, 8, 32, int32_t, 32, 1) \
  MACRO (32, 1, 8, 32, int32_t, 64, 2) \
  MACRO (64, 1, 8, 64, int64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF8_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, 1, 8, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 8, 8, int8_t, 16, 2, __VA_ARGS__) \
  MACRO (8, 1, 8, 8, int8_t, 32, 4, __VA_ARGS__) \
  MACRO (8, 1, 8, 8, int8_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, int16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, int16_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, int32_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, int64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_ITERATOR(MACRO) \
  MACRO (16, 1, 2, 16, __float16_t) \
  MACRO (16, 1, 3, 16, __float16_t) \
  MACRO (16, 1, 4, 16, __float16_t) \
  MACRO (16, 1, 5, 16, __float16_t) \
  MACRO (16, 1, 6, 16, __float16_t) \
  MACRO (16, 1, 7, 16, __float16_t) \
  MACRO (16, 1, 8, 16, __float16_t) \
  MACRO (16, 2, 2, 8, __float16_t) \
  MACRO (16, 2, 3, 8, __float16_t) \
  MACRO (16, 2, 4, 8, __float16_t) \
  MACRO (16, 4, 2, 4, __float16_t) \
  MACRO (32, 1, 2, 32, __float32_t) \
  MACRO (32, 1, 3, 32, __float32_t) \
  MACRO (32, 1, 4, 32, __float32_t) \
  MACRO (32, 1, 5, 32, __float32_t) \
  MACRO (32, 1, 6, 32, __float32_t) \
  MACRO (32, 1, 7, 32, __float32_t) \
  MACRO (32, 1, 8, 32, __float32_t) \
  MACRO (32, 2, 2, 16, __float32_t) \
  MACRO (32, 2, 3, 16, __float32_t) \
  MACRO (32, 2, 4, 16, __float32_t) \
  MACRO (32, 4, 2, 8, __float32_t) \
  MACRO (64, 1, 2, 64, __float64_t) \
  MACRO (64, 1, 3, 64, __float64_t) \
  MACRO (64, 1, 4, 64, __float64_t) \
  MACRO (64, 1, 5, 64, __float64_t) \
  MACRO (64, 1, 6, 64, __float64_t) \
  MACRO (64, 1, 7, 64, __float64_t) \
  MACRO (64, 1, 8, 64, __float64_t) \
  MACRO (64, 2, 2, 32, __float64_t) \
  MACRO (64, 2, 3, 32, __float64_t) \
  MACRO (64, 2, 4, 32, __float64_t) \
  MACRO (64, 4, 2, 16, __float64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 2, 16, __float16_t, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, __float16_t, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, __float16_t, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, __float16_t, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, __float16_t, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, __float16_t, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, __float16_t, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, __float16_t, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, __float16_t, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, __float16_t, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, __float16_t, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, __float32_t, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, __float32_t, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, __float32_t, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, __float32_t, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, __float32_t, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, __float32_t, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, __float32_t, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, __float32_t, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, __float32_t, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, __float32_t, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, __float32_t, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, __float64_t, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, __float64_t, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, __float64_t, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, __float64_t, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, __float64_t, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, __float64_t, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, __float64_t, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, __float64_t, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, __float64_t, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, __float64_t, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, __float64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_INDEX_ITERATOR(MACRO) \
  MACRO (16, 1, 2, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 2, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 2, 16, __float16_t, 64, 4) \
  MACRO (16, 1, 3, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 3, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 3, 16, __float16_t, 64, 4) \
  MACRO (16, 1, 4, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 4, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 4, 16, __float16_t, 64, 4) \
  MACRO (16, 1, 5, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 5, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 5, 16, __float16_t, 64, 4) \
  MACRO (16, 1, 6, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 6, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 6, 16, __float16_t, 64, 4) \
  MACRO (16, 1, 7, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 7, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 7, 16, __float16_t, 64, 4) \
  MACRO (16, 1, 8, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 8, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 8, 16, __float16_t, 64, 4) \
  MACRO (16, 2, 2, 8, __float16_t, 8, 1) \
  MACRO (16, 2, 2, 8, __float16_t, 16, 2) \
  MACRO (16, 2, 2, 8, __float16_t, 32, 4) \
  MACRO (16, 2, 2, 8, __float16_t, 64, 8) \
  MACRO (16, 2, 3, 8, __float16_t, 8, 1) \
  MACRO (16, 2, 3, 8, __float16_t, 16, 2) \
  MACRO (16, 2, 3, 8, __float16_t, 32, 4) \
  MACRO (16, 2, 3, 8, __float16_t, 64, 8) \
  MACRO (16, 2, 4, 8, __float16_t, 8, 1) \
  MACRO (16, 2, 4, 8, __float16_t, 16, 2) \
  MACRO (16, 2, 4, 8, __float16_t, 32, 4) \
  MACRO (16, 2, 4, 8, __float16_t, 64, 8) \
  MACRO (16, 4, 2, 4, __float16_t, 8, 2) \
  MACRO (16, 4, 2, 4, __float16_t, 16, 4) \
  MACRO (16, 4, 2, 4, __float16_t, 32, 8) \
  MACRO (32, 1, 2, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 2, 32, __float32_t, 64, 2) \
  MACRO (32, 1, 3, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 3, 32, __float32_t, 64, 2) \
  MACRO (32, 1, 4, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 4, 32, __float32_t, 64, 2) \
  MACRO (32, 1, 5, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 5, 32, __float32_t, 64, 2) \
  MACRO (32, 1, 6, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 6, 32, __float32_t, 64, 2) \
  MACRO (32, 1, 7, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 7, 32, __float32_t, 64, 2) \
  MACRO (32, 1, 8, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 8, 32, __float32_t, 64, 2) \
  MACRO (32, 2, 2, 16, __float32_t, 16, 1) \
  MACRO (32, 2, 2, 16, __float32_t, 32, 2) \
  MACRO (32, 2, 2, 16, __float32_t, 64, 4) \
  MACRO (32, 2, 3, 16, __float32_t, 16, 1) \
  MACRO (32, 2, 3, 16, __float32_t, 32, 2) \
  MACRO (32, 2, 3, 16, __float32_t, 64, 4) \
  MACRO (32, 2, 4, 16, __float32_t, 16, 1) \
  MACRO (32, 2, 4, 16, __float32_t, 32, 2) \
  MACRO (32, 2, 4, 16, __float32_t, 64, 4) \
  MACRO (32, 4, 2, 8, __float32_t, 8, 1) \
  MACRO (32, 4, 2, 8, __float32_t, 16, 2) \
  MACRO (32, 4, 2, 8, __float32_t, 32, 4) \
  MACRO (32, 4, 2, 8, __float32_t, 64, 8) \
  MACRO (64, 1, 2, 64, __float64_t, 64, 1) \
  MACRO (64, 1, 3, 64, __float64_t, 64, 1) \
  MACRO (64, 1, 4, 64, __float64_t, 64, 1) \
  MACRO (64, 1, 5, 64, __float64_t, 64, 1) \
  MACRO (64, 1, 6, 64, __float64_t, 64, 1) \
  MACRO (64, 1, 7, 64, __float64_t, 64, 1) \
  MACRO (64, 1, 8, 64, __float64_t, 64, 1) \
  MACRO (64, 2, 2, 32, __float64_t, 32, 1) \
  MACRO (64, 2, 2, 32, __float64_t, 64, 2) \
  MACRO (64, 2, 3, 32, __float64_t, 32, 1) \
  MACRO (64, 2, 3, 32, __float64_t, 64, 2) \
  MACRO (64, 2, 4, 32, __float64_t, 32, 1) \
  MACRO (64, 2, 4, 32, __float64_t, 64, 2) \
  MACRO (64, 4, 2, 16, __float64_t, 16, 1) \
  MACRO (64, 4, 2, 16, __float64_t, 32, 2) \
  MACRO (64, 4, 2, 16, __float64_t, 64, 4) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 2, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 2, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 2, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, __float16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, __float16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, __float16_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, __float16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, __float16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, __float16_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, __float16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, __float16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, __float16_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, __float16_t, 8, 2, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, __float16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, __float16_t, 32, 8, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, __float32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, __float32_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, __float32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, __float32_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, __float32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, __float32_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, __float32_t, 8, 1, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, __float32_t, 16, 2, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, __float32_t, 32, 4, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, __float32_t, 64, 8, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, __float64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, __float64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, __float64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, __float64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, __float64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, __float64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, __float64_t, 16, 1, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, __float64_t, 32, 2, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, __float64_t, 64, 4, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF2_ITERATOR(MACRO) \
  MACRO (16, 1, 2, 16, __float16_t) \
  MACRO (16, 2, 2, 8, __float16_t) \
  MACRO (16, 4, 2, 4, __float16_t) \
  MACRO (32, 1, 2, 32, __float32_t) \
  MACRO (32, 2, 2, 16, __float32_t) \
  MACRO (32, 4, 2, 8, __float32_t) \
  MACRO (64, 1, 2, 64, __float64_t) \
  MACRO (64, 2, 2, 32, __float64_t) \
  MACRO (64, 4, 2, 16, __float64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF2_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 2, 16, __float16_t, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, __float16_t, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, __float16_t, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, __float32_t, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, __float32_t, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, __float32_t, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, __float64_t, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, __float64_t, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, __float64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF3_ITERATOR(MACRO) \
  MACRO (16, 1, 3, 16, __float16_t) \
  MACRO (16, 2, 3, 8, __float16_t) \
  MACRO (32, 1, 3, 32, __float32_t) \
  MACRO (32, 2, 3, 16, __float32_t) \
  MACRO (64, 1, 3, 64, __float64_t) \
  MACRO (64, 2, 3, 32, __float64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF3_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 3, 16, __float16_t, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, __float16_t, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, __float32_t, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, __float32_t, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, __float64_t, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, __float64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF4_ITERATOR(MACRO) \
  MACRO (16, 1, 4, 16, __float16_t) \
  MACRO (16, 2, 4, 8, __float16_t) \
  MACRO (32, 1, 4, 32, __float32_t) \
  MACRO (32, 2, 4, 16, __float32_t) \
  MACRO (64, 1, 4, 64, __float64_t) \
  MACRO (64, 2, 4, 32, __float64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF4_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 4, 16, __float16_t, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, __float16_t, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, __float32_t, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, __float32_t, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, __float64_t, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, __float64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF5_ITERATOR(MACRO) \
  MACRO (16, 1, 5, 16, __float16_t) \
  MACRO (32, 1, 5, 32, __float32_t) \
  MACRO (64, 1, 5, 64, __float64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF5_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 5, 16, __float16_t, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, __float32_t, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, __float64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF6_ITERATOR(MACRO) \
  MACRO (16, 1, 6, 16, __float16_t) \
  MACRO (32, 1, 6, 32, __float32_t) \
  MACRO (64, 1, 6, 64, __float64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF6_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 6, 16, __float16_t, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, __float32_t, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, __float64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF7_ITERATOR(MACRO) \
  MACRO (16, 1, 7, 16, __float16_t) \
  MACRO (32, 1, 7, 32, __float32_t) \
  MACRO (64, 1, 7, 64, __float64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF7_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 7, 16, __float16_t, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, __float32_t, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, __float64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF8_ITERATOR(MACRO) \
  MACRO (16, 1, 8, 16, __float16_t) \
  MACRO (32, 1, 8, 32, __float32_t) \
  MACRO (64, 1, 8, 64, __float64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF8_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 8, 16, __float16_t, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, __float32_t, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, __float64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF2_INDEX_ITERATOR(MACRO) \
  MACRO (16, 1, 2, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 2, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 2, 16, __float16_t, 64, 4) \
  MACRO (16, 2, 2, 8, __float16_t, 8, 1) \
  MACRO (16, 2, 2, 8, __float16_t, 16, 2) \
  MACRO (16, 2, 2, 8, __float16_t, 32, 4) \
  MACRO (16, 2, 2, 8, __float16_t, 64, 8) \
  MACRO (16, 4, 2, 4, __float16_t, 8, 2) \
  MACRO (16, 4, 2, 4, __float16_t, 16, 4) \
  MACRO (16, 4, 2, 4, __float16_t, 32, 8) \
  MACRO (32, 1, 2, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 2, 32, __float32_t, 64, 2) \
  MACRO (32, 2, 2, 16, __float32_t, 16, 1) \
  MACRO (32, 2, 2, 16, __float32_t, 32, 2) \
  MACRO (32, 2, 2, 16, __float32_t, 64, 4) \
  MACRO (32, 4, 2, 8, __float32_t, 8, 1) \
  MACRO (32, 4, 2, 8, __float32_t, 16, 2) \
  MACRO (32, 4, 2, 8, __float32_t, 32, 4) \
  MACRO (32, 4, 2, 8, __float32_t, 64, 8) \
  MACRO (64, 1, 2, 64, __float64_t, 64, 1) \
  MACRO (64, 2, 2, 32, __float64_t, 32, 1) \
  MACRO (64, 2, 2, 32, __float64_t, 64, 2) \
  MACRO (64, 4, 2, 16, __float64_t, 16, 1) \
  MACRO (64, 4, 2, 16, __float64_t, 32, 2) \
  MACRO (64, 4, 2, 16, __float64_t, 64, 4) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF2_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 2, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 2, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 2, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, __float16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, __float16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, __float16_t, 64, 8, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, __float16_t, 8, 2, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, __float16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, __float16_t, 32, 8, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, __float32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, __float32_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, __float32_t, 8, 1, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, __float32_t, 16, 2, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, __float32_t, 32, 4, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, __float32_t, 64, 8, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, __float64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, __float64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, __float64_t, 16, 1, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, __float64_t, 32, 2, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, __float64_t, 64, 4, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF3_INDEX_ITERATOR(MACRO) \
  MACRO (16, 1, 3, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 3, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 3, 16, __float16_t, 64, 4) \
  MACRO (16, 2, 3, 8, __float16_t, 8, 1) \
  MACRO (16, 2, 3, 8, __float16_t, 16, 2) \
  MACRO (16, 2, 3, 8, __float16_t, 32, 4) \
  MACRO (16, 2, 3, 8, __float16_t, 64, 8) \
  MACRO (32, 1, 3, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 3, 32, __float32_t, 64, 2) \
  MACRO (32, 2, 3, 16, __float32_t, 16, 1) \
  MACRO (32, 2, 3, 16, __float32_t, 32, 2) \
  MACRO (32, 2, 3, 16, __float32_t, 64, 4) \
  MACRO (64, 1, 3, 64, __float64_t, 64, 1) \
  MACRO (64, 2, 3, 32, __float64_t, 32, 1) \
  MACRO (64, 2, 3, 32, __float64_t, 64, 2) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF3_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 3, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, __float16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, __float16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, __float16_t, 64, 8, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, __float32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, __float32_t, 64, 4, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, __float64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, __float64_t, 64, 2, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF4_INDEX_ITERATOR(MACRO) \
  MACRO (16, 1, 4, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 4, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 4, 16, __float16_t, 64, 4) \
  MACRO (16, 2, 4, 8, __float16_t, 8, 1) \
  MACRO (16, 2, 4, 8, __float16_t, 16, 2) \
  MACRO (16, 2, 4, 8, __float16_t, 32, 4) \
  MACRO (16, 2, 4, 8, __float16_t, 64, 8) \
  MACRO (32, 1, 4, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 4, 32, __float32_t, 64, 2) \
  MACRO (32, 2, 4, 16, __float32_t, 16, 1) \
  MACRO (32, 2, 4, 16, __float32_t, 32, 2) \
  MACRO (32, 2, 4, 16, __float32_t, 64, 4) \
  MACRO (64, 1, 4, 64, __float64_t, 64, 1) \
  MACRO (64, 2, 4, 32, __float64_t, 32, 1) \
  MACRO (64, 2, 4, 32, __float64_t, 64, 2) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF4_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 4, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, __float16_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, __float16_t, 32, 4, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, __float16_t, 64, 8, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, __float32_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, __float32_t, 64, 4, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, __float64_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, __float64_t, 64, 2, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF5_INDEX_ITERATOR(MACRO) \
  MACRO (16, 1, 5, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 5, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 5, 16, __float16_t, 64, 4) \
  MACRO (32, 1, 5, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 5, 32, __float32_t, 64, 2) \
  MACRO (64, 1, 5, 64, __float64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF5_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 5, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, __float64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF6_INDEX_ITERATOR(MACRO) \
  MACRO (16, 1, 6, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 6, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 6, 16, __float16_t, 64, 4) \
  MACRO (32, 1, 6, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 6, 32, __float32_t, 64, 2) \
  MACRO (64, 1, 6, 64, __float64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF6_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 6, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, __float64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF7_INDEX_ITERATOR(MACRO) \
  MACRO (16, 1, 7, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 7, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 7, 16, __float16_t, 64, 4) \
  MACRO (32, 1, 7, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 7, 32, __float32_t, 64, 2) \
  MACRO (64, 1, 7, 64, __float64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF7_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 7, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, __float64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF8_INDEX_ITERATOR(MACRO) \
  MACRO (16, 1, 8, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 8, 16, __float16_t, 32, 2) \
  MACRO (16, 1, 8, 16, __float16_t, 64, 4) \
  MACRO (32, 1, 8, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 8, 32, __float32_t, 64, 2) \
  MACRO (64, 1, 8, 64, __float64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF8_INDEX_ITERATOR_ARG(MACRO, ...) \
  MACRO (16, 1, 8, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, __float16_t, 32, 2, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, __float16_t, 64, 4, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, __float32_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, __float64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, integer types, and info for
   corresponding quad widening SEW vector type.  */
#define _RVV_QINT_SEW8_ITERATOR(MACRO) \
  MACRO (8, f2, 16, int8_t, 32, int32_t) \
  MACRO (8, 1, 8, int8_t, 32, int32_t) \
  MACRO (8, 2, 4, int8_t, 32, int32_t) \
  MACRO (8, 4, 2, int8_t, 32, int32_t) \
  MACRO (8, 8, 1, int8_t, 32, int32_t) \

/* Same as above but with an extra argument.  */
#define _RVV_QINT_SEW8_ITERATOR_ARG(MACRO, ...) \
  MACRO (8, f2, 16, int8_t, 32, int32_t, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 32, int32_t, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 32, int32_t, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 32, int32_t, __VA_ARGS__) \
  MACRO (8, 8, 1, int8_t, 32, int32_t, __VA_ARGS__) \

#if __riscv_v == 7000
/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, integer types, and info for
   corresponding integer and vector type.  */
#define _RVV_INT_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (8, f8, 64, int8_t, 8, f8) \
  MACRO (8, f4, 32, int8_t, 8, f4) \
  MACRO (8, f2, 16, int8_t, 8, f2) \
  MACRO (8, 1, 8, int8_t, 8, 1) \
  MACRO (8, 2, 4, int8_t, 8, 2) \
  MACRO (8, 4, 2, int8_t, 8, 4) \
  MACRO (8, 8, 1, int8_t, 8, 8) \
  MACRO (16, f4, 64, int16_t, 16, f4) \
  MACRO (16, f2, 32, int16_t, 16, f2) \
  MACRO (16, 1, 16, int16_t, 16, 1) \
  MACRO (16, 2, 8, int16_t, 16, 2) \
  MACRO (16, 4, 4, int16_t, 16, 4) \
  MACRO (16, 8, 2, int16_t, 16, 8) \
  MACRO (32, f2, 64, int32_t, 32, f2) \
  MACRO (32, 1, 32, int32_t, 32, 1) \
  MACRO (32, 2, 16, int32_t, 32, 2) \
  MACRO (32, 4, 8, int32_t, 32, 4) \
  MACRO (32, 8, 4, int32_t, 32, 8) \
  MACRO (64, 1, 64, int64_t, 64, 1) \
  MACRO (64, 2, 32, int64_t, 64, 2) \
  MACRO (64, 4, 16, int64_t, 64, 4) \
  MACRO (64, 8, 8, int64_t, 64, 8) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (8, f8, 64, int8_t, 8, f8, __VA_ARGS__) \
  MACRO (8, f4, 32, int8_t, 8, f4, __VA_ARGS__) \
  MACRO (8, f2, 16, int8_t, 8, f2, __VA_ARGS__) \
  MACRO (8, 1, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 2, 4, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 4, 2, int8_t, 8, 4, __VA_ARGS__) \
  MACRO (8, 8, 1, int8_t, 8, 8, __VA_ARGS__) \
  MACRO (16, f4, 64, int16_t, 16, f4, __VA_ARGS__) \
  MACRO (16, f2, 32, int16_t, 16, f2, __VA_ARGS__) \
  MACRO (16, 1, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, 8, 2, int16_t, 16, 8, __VA_ARGS__) \
  MACRO (32, f2, 64, int32_t, 32, f2, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, 32, 4, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, 32, 8, __VA_ARGS__) \
  MACRO (64, 1, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 32, int64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 4, 16, int64_t, 64, 4, __VA_ARGS__) \
  MACRO (64, 8, 8, int64_t, 64, 8, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point types, and info for
   corresponding floating point and vector type.  */
#define _RVV_FLOAT_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (16, f4, 64, __float16_t, 16, f4) \
  MACRO (16, f2, 32, __float16_t, 16, f2) \
  MACRO (16, 1, 16, __float16_t, 16, 1) \
  MACRO (16, 2, 8, __float16_t, 16, 2) \
  MACRO (16, 4, 4, __float16_t, 16, 4) \
  MACRO (16, 8, 2, __float16_t, 16, 8) \
  MACRO (32, f2, 64, __float32_t, 32, f2) \
  MACRO (32, 1, 32, __float32_t, 32, 1) \
  MACRO (32, 2, 16, __float32_t, 32, 2) \
  MACRO (32, 4, 8, __float32_t, 32, 4) \
  MACRO (32, 8, 4, __float32_t, 32, 8) \
  MACRO (64, 1, 64, __float64_t, 64, 1) \
  MACRO (64, 2, 32, __float64_t, 64, 2) \
  MACRO (64, 4, 16, __float64_t, 64, 4) \
  MACRO (64, 8, 8, __float64_t, 64, 8) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (16, f4, 64, __float16_t, 16, f4, __VA_ARGS__) \
  MACRO (16, f2, 32, __float16_t, 16, f2, __VA_ARGS__) \
  MACRO (16, 1, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 2, 8, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 4, 4, __float16_t, 16, 4, __VA_ARGS__) \
  MACRO (16, 8, 2, __float16_t, 16, 8, __VA_ARGS__) \
  MACRO (32, f2, 64, __float32_t, 32, f2, __VA_ARGS__) \
  MACRO (32, 1, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 2, 16, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 4, 8, __float32_t, 32, 4, __VA_ARGS__) \
  MACRO (32, 8, 4, __float32_t, 32, 8, __VA_ARGS__) \
  MACRO (64, 1, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 32, __float64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 4, 16, __float64_t, 64, 4, __VA_ARGS__) \
  MACRO (64, 8, 8, __float64_t, 64, 8, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (8, 1, 2, 8, int8_t, 8, 1) \
  MACRO (8, 1, 3, 8, int8_t, 8, 1) \
  MACRO (8, 1, 4, 8, int8_t, 8, 1) \
  MACRO (8, 1, 5, 8, int8_t, 8, 1) \
  MACRO (8, 1, 6, 8, int8_t, 8, 1) \
  MACRO (8, 1, 7, 8, int8_t, 8, 1) \
  MACRO (8, 1, 8, 8, int8_t, 8, 1) \
  MACRO (8, 2, 2, 4, int8_t, 8, 2) \
  MACRO (8, 2, 3, 4, int8_t, 8, 2) \
  MACRO (8, 2, 4, 4, int8_t, 8, 2) \
  MACRO (8, 4, 2, 2, int8_t, 8, 4) \
  MACRO (16, 1, 2, 16, int16_t, 16, 1) \
  MACRO (16, 1, 3, 16, int16_t, 16, 1) \
  MACRO (16, 1, 4, 16, int16_t, 16, 1) \
  MACRO (16, 1, 5, 16, int16_t, 16, 1) \
  MACRO (16, 1, 6, 16, int16_t, 16, 1) \
  MACRO (16, 1, 7, 16, int16_t, 16, 1) \
  MACRO (16, 1, 8, 16, int16_t, 16, 1) \
  MACRO (16, 2, 2, 8, int16_t, 16, 2) \
  MACRO (16, 2, 3, 8, int16_t, 16, 2) \
  MACRO (16, 2, 4, 8, int16_t, 16, 2) \
  MACRO (16, 4, 2, 4, int16_t, 16, 4) \
  MACRO (32, 1, 2, 32, int32_t, 32, 1) \
  MACRO (32, 1, 3, 32, int32_t, 32, 1) \
  MACRO (32, 1, 4, 32, int32_t, 32, 1) \
  MACRO (32, 1, 5, 32, int32_t, 32, 1) \
  MACRO (32, 1, 6, 32, int32_t, 32, 1) \
  MACRO (32, 1, 7, 32, int32_t, 32, 1) \
  MACRO (32, 1, 8, 32, int32_t, 32, 1) \
  MACRO (32, 2, 2, 16, int32_t, 32, 2) \
  MACRO (32, 2, 3, 16, int32_t, 32, 2) \
  MACRO (32, 2, 4, 16, int32_t, 32, 2) \
  MACRO (32, 4, 2, 8, int32_t, 32, 4) \
  MACRO (64, 1, 2, 64, int64_t, 64, 1) \
  MACRO (64, 1, 3, 64, int64_t, 64, 1) \
  MACRO (64, 1, 4, 64, int64_t, 64, 1) \
  MACRO (64, 1, 5, 64, int64_t, 64, 1) \
  MACRO (64, 1, 6, 64, int64_t, 64, 1) \
  MACRO (64, 1, 7, 64, int64_t, 64, 1) \
  MACRO (64, 1, 8, 64, int64_t, 64, 1) \
  MACRO (64, 2, 2, 32, int64_t, 64, 2) \
  MACRO (64, 2, 3, 32, int64_t, 64, 2) \
  MACRO (64, 2, 4, 32, int64_t, 64, 2) \
  MACRO (64, 4, 2, 16, int64_t, 64, 4) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (8, 1, 2, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 3, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 4, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 5, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 6, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 7, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 1, 8, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 2, 2, 4, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 2, 3, 4, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 2, 4, 4, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 4, 2, 2, int8_t, 8, 4, __VA_ARGS__) \
  MACRO (16, 1, 2, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, int16_t, 16, 4, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, 32, 4, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, int64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, int64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, int64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, int64_t, 64, 4, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (16, 1, 2, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 3, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 4, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 5, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 6, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 7, 16, __float16_t, 16, 1) \
  MACRO (16, 1, 8, 16, __float16_t, 16, 1) \
  MACRO (16, 2, 2, 8, __float16_t, 16, 2) \
  MACRO (16, 2, 3, 8, __float16_t, 16, 2) \
  MACRO (16, 2, 4, 8, __float16_t, 16, 2) \
  MACRO (16, 4, 2, 4, __float16_t, 16, 4) \
  MACRO (32, 1, 2, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 3, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 4, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 5, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 6, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 7, 32, __float32_t, 32, 1) \
  MACRO (32, 1, 8, 32, __float32_t, 32, 1) \
  MACRO (32, 2, 2, 16, __float32_t, 32, 2) \
  MACRO (32, 2, 3, 16, __float32_t, 32, 2) \
  MACRO (32, 2, 4, 16, __float32_t, 32, 2) \
  MACRO (32, 4, 2, 8, __float32_t, 32, 4) \
  MACRO (64, 1, 2, 64, __float64_t, 64, 1) \
  MACRO (64, 1, 3, 64, __float64_t, 64, 1) \
  MACRO (64, 1, 4, 64, __float64_t, 64, 1) \
  MACRO (64, 1, 5, 64, __float64_t, 64, 1) \
  MACRO (64, 1, 6, 64, __float64_t, 64, 1) \
  MACRO (64, 1, 7, 64, __float64_t, 64, 1) \
  MACRO (64, 1, 8, 64, __float64_t, 64, 1) \
  MACRO (64, 2, 2, 32, __float64_t, 64, 2) \
  MACRO (64, 2, 3, 32, __float64_t, 64, 2) \
  MACRO (64, 2, 4, 32, __float64_t, 64, 2) \
  MACRO (64, 4, 2, 16, __float64_t, 64, 4) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (16, 1, 2, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, __float16_t, 16, 4, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, __float32_t, 32, 4, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, __float64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, __float64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, __float64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, __float64_t, 64, 4, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF2_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (8, 1, 2, 8, int8_t, 8, 1) \
  MACRO (8, 2, 2, 4, int8_t, 8, 2) \
  MACRO (8, 4, 2, 2, int8_t, 8, 4) \
  MACRO (16, 1, 2, 16, int16_t, 16, 1) \
  MACRO (16, 2, 2, 8, int16_t, 16, 2) \
  MACRO (16, 4, 2, 4, int16_t, 16, 4) \
  MACRO (32, 1, 2, 32, int32_t, 32, 1) \
  MACRO (32, 2, 2, 16, int32_t, 32, 2) \
  MACRO (32, 4, 2, 8, int32_t, 32, 4) \
  MACRO (64, 1, 2, 64, int64_t, 64, 1) \
  MACRO (64, 2, 2, 32, int64_t, 64, 2) \
  MACRO (64, 4, 2, 16, int64_t, 64, 4) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF2_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (8, 1, 2, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 2, 2, 4, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (8, 4, 2, 2, int8_t, 8, 4, __VA_ARGS__) \
  MACRO (16, 1, 2, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, int16_t, 16, 4, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, 32, 4, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, int64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, int64_t, 64, 4, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF3_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (8, 1, 3, 8, int8_t, 8, 1) \
  MACRO (8, 2, 3, 4, int8_t, 8, 2) \
  MACRO (16, 1, 3, 16, int16_t, 16, 1) \
  MACRO (16, 2, 3, 8, int16_t, 16, 2) \
  MACRO (32, 1, 3, 32, int32_t, 32, 1) \
  MACRO (32, 2, 3, 16, int32_t, 32, 2) \
  MACRO (64, 1, 3, 64, int64_t, 64, 1) \
  MACRO (64, 2, 3, 32, int64_t, 64, 2) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF3_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (8, 1, 3, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 2, 3, 4, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, int64_t, 64, 2, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF4_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (8, 1, 4, 8, int8_t, 8, 1) \
  MACRO (8, 2, 4, 4, int8_t, 8, 2) \
  MACRO (16, 1, 4, 16, int16_t, 16, 1) \
  MACRO (16, 2, 4, 8, int16_t, 16, 2) \
  MACRO (32, 1, 4, 32, int32_t, 32, 1) \
  MACRO (32, 2, 4, 16, int32_t, 32, 2) \
  MACRO (64, 1, 4, 64, int64_t, 64, 1) \
  MACRO (64, 2, 4, 32, int64_t, 64, 2) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF4_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (8, 1, 4, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (8, 2, 4, 4, int8_t, 8, 2, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, int16_t, 16, 2, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, int32_t, 32, 2, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, int64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, int64_t, 64, 2, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF5_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (8, 1, 5, 8, int8_t, 8, 1) \
  MACRO (16, 1, 5, 16, int16_t, 16, 1) \
  MACRO (32, 1, 5, 32, int32_t, 32, 1) \
  MACRO (64, 1, 5, 64, int64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF5_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (8, 1, 5, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, int64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF6_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (8, 1, 6, 8, int8_t, 8, 1) \
  MACRO (16, 1, 6, 16, int16_t, 16, 1) \
  MACRO (32, 1, 6, 32, int32_t, 32, 1) \
  MACRO (64, 1, 6, 64, int64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF6_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (8, 1, 6, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, int64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF7_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (8, 1, 7, 8, int8_t, 8, 1) \
  MACRO (16, 1, 7, 16, int16_t, 16, 1) \
  MACRO (32, 1, 7, 32, int32_t, 32, 1) \
  MACRO (64, 1, 7, 64, int64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF7_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (8, 1, 7, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, int64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF8_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (8, 1, 8, 8, int8_t, 8, 1) \
  MACRO (16, 1, 8, 16, int16_t, 16, 1) \
  MACRO (32, 1, 8, 32, int32_t, 32, 1) \
  MACRO (64, 1, 8, 64, int64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF8_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (8, 1, 8, 8, int8_t, 8, 1, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, int16_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, int32_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, int64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF2_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (16, 1, 2, 16, __float16_t, 16, 1) \
  MACRO (16, 2, 2, 8, __float16_t, 16, 2) \
  MACRO (16, 4, 2, 4, __float16_t, 16, 4) \
  MACRO (32, 1, 2, 32, __float32_t, 32, 1) \
  MACRO (32, 2, 2, 16, __float32_t, 32, 2) \
  MACRO (32, 4, 2, 8, __float32_t, 32, 4) \
  MACRO (64, 1, 2, 64, __float64_t, 64, 1) \
  MACRO (64, 2, 2, 32, __float64_t, 64, 2) \
  MACRO (64, 4, 2, 16, __float64_t, 64, 4) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF2_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (16, 1, 2, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, __float16_t, 16, 4, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, __float32_t, 32, 4, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, __float64_t, 64, 2, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, __float64_t, 64, 4, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF3_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (16, 1, 3, 16, __float16_t, 16, 1) \
  MACRO (16, 2, 3, 8, __float16_t, 16, 2) \
  MACRO (32, 1, 3, 32, __float32_t, 32, 1) \
  MACRO (32, 2, 3, 16, __float32_t, 32, 2) \
  MACRO (64, 1, 3, 64, __float64_t, 64, 1) \
  MACRO (64, 2, 3, 32, __float64_t, 64, 2) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF3_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (16, 1, 3, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, __float64_t, 64, 2, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF4_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (16, 1, 4, 16, __float16_t, 16, 1) \
  MACRO (16, 2, 4, 8, __float16_t, 16, 2) \
  MACRO (32, 1, 4, 32, __float32_t, 32, 1) \
  MACRO (32, 2, 4, 16, __float32_t, 32, 2) \
  MACRO (64, 1, 4, 64, __float64_t, 64, 1) \
  MACRO (64, 2, 4, 32, __float64_t, 64, 2) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF4_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (16, 1, 4, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, __float16_t, 16, 2, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, __float32_t, 32, 2, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, __float64_t, 64, 1, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, __float64_t, 64, 2, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF5_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (16, 1, 5, 16, __float16_t, 16, 1) \
  MACRO (32, 1, 5, 32, __float32_t, 32, 1) \
  MACRO (64, 1, 5, 64, __float64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF5_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (16, 1, 5, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, __float64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF6_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (16, 1, 6, 16, __float16_t, 16, 1) \
  MACRO (32, 1, 6, 32, __float32_t, 32, 1) \
  MACRO (64, 1, 6, 64, __float64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF6_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (16, 1, 6, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, __float64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF7_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (16, 1, 7, 16, __float16_t, 16, 1) \
  MACRO (32, 1, 7, 32, __float32_t, 32, 1) \
  MACRO (64, 1, 7, 64, __float64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF7_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (16, 1, 7, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, __float64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_FLOAT_TUPLE_NF8_INDEX_ITERATOR_V0P7(MACRO) \
  MACRO (16, 1, 8, 16, __float16_t, 16, 1) \
  MACRO (32, 1, 8, 32, __float32_t, 32, 1) \
  MACRO (64, 1, 8, 64, __float64_t, 64, 1) \

/* Same as above but with an extra argument.  */
#define _RVV_FLOAT_TUPLE_NF8_INDEX_ITERATOR_V0P7_ARG(MACRO, ...) \
  MACRO (16, 1, 8, 16, __float16_t, 16, 1, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, __float32_t, 32, 1, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, __float64_t, 64, 1, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector and integer types.  */
#define _RVV_INT_ITERATOR_LDST16(MACRO) \
  MACRO (16, 1, 16, int16_t) \
  MACRO (16, 2, 8, int16_t) \
  MACRO (16, 4, 4, int16_t) \
  MACRO (16, 8, 2, int16_t) \
  MACRO (32, 1, 32, int32_t) \
  MACRO (32, 2, 16, int32_t) \
  MACRO (32, 4, 8, int32_t) \
  MACRO (32, 8, 4, int32_t) \
  MACRO (64, 1, 64, int64_t) \
  MACRO (64, 2, 32, int64_t) \
  MACRO (64, 4, 16, int64_t) \
  MACRO (64, 8, 8, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_ITERATOR_LDST16_ARG(MACRO, ...) \
  MACRO (16, 1, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 8, int16_t, __VA_ARGS__) \
  MACRO (16, 4, 4, int16_t, __VA_ARGS__) \
  MACRO (16, 8, 2, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 4, 16, int64_t, __VA_ARGS__) \
  MACRO (64, 8, 8, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported SEW, LMUL and MLEN value,
   along with its corresponding vector and integer types.  */
#define _RVV_INT_ITERATOR_LDST32(MACRO) \
  MACRO (32, 1, 32, int32_t) \
  MACRO (32, 2, 16, int32_t) \
  MACRO (32, 4, 8, int32_t) \
  MACRO (32, 8, 4, int32_t) \
  MACRO (64, 1, 64, int64_t) \
  MACRO (64, 2, 32, int64_t) \
  MACRO (64, 4, 16, int64_t) \
  MACRO (64, 8, 8, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_ITERATOR_LDST32_ARG(MACRO, ...) \
  MACRO (32, 1, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 4, 8, int32_t, __VA_ARGS__) \
  MACRO (32, 8, 4, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 4, 16, int64_t, __VA_ARGS__) \
  MACRO (64, 8, 8, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_ITERATOR_LDST16(MACRO) \
  MACRO (16, 1, 2, 16, int16_t) \
  MACRO (16, 1, 3, 16, int16_t) \
  MACRO (16, 1, 4, 16, int16_t) \
  MACRO (16, 1, 5, 16, int16_t) \
  MACRO (16, 1, 6, 16, int16_t) \
  MACRO (16, 1, 7, 16, int16_t) \
  MACRO (16, 1, 8, 16, int16_t) \
  MACRO (16, 2, 2, 8, int16_t) \
  MACRO (16, 2, 3, 8, int16_t) \
  MACRO (16, 2, 4, 8, int16_t) \
  MACRO (16, 4, 2, 4, int16_t) \
  MACRO (32, 1, 2, 32, int32_t) \
  MACRO (32, 1, 3, 32, int32_t) \
  MACRO (32, 1, 4, 32, int32_t) \
  MACRO (32, 1, 5, 32, int32_t) \
  MACRO (32, 1, 6, 32, int32_t) \
  MACRO (32, 1, 7, 32, int32_t) \
  MACRO (32, 1, 8, 32, int32_t) \
  MACRO (32, 2, 2, 16, int32_t) \
  MACRO (32, 2, 3, 16, int32_t) \
  MACRO (32, 2, 4, 16, int32_t) \
  MACRO (32, 4, 2, 8, int32_t) \
  MACRO (64, 1, 2, 64, int64_t) \
  MACRO (64, 1, 3, 64, int64_t) \
  MACRO (64, 1, 4, 64, int64_t) \
  MACRO (64, 1, 5, 64, int64_t) \
  MACRO (64, 1, 6, 64, int64_t) \
  MACRO (64, 1, 7, 64, int64_t) \
  MACRO (64, 1, 8, 64, int64_t) \
  MACRO (64, 2, 2, 32, int64_t) \
  MACRO (64, 2, 3, 32, int64_t) \
  MACRO (64, 2, 4, 32, int64_t) \
  MACRO (64, 4, 2, 16, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_ITERATOR_LDST16_ARG(MACRO, ...) \
  MACRO (16, 1, 2, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 1, 3, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 1, 4, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 1, 5, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 1, 6, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 1, 7, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 1, 8, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, int16_t, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_ITERATOR_LDST32(MACRO) \
  MACRO (32, 1, 2, 32, int32_t) \
  MACRO (32, 1, 3, 32, int32_t) \
  MACRO (32, 1, 4, 32, int32_t) \
  MACRO (32, 1, 5, 32, int32_t) \
  MACRO (32, 1, 6, 32, int32_t) \
  MACRO (32, 1, 7, 32, int32_t) \
  MACRO (32, 1, 8, 32, int32_t) \
  MACRO (32, 2, 2, 16, int32_t) \
  MACRO (32, 2, 3, 16, int32_t) \
  MACRO (32, 2, 4, 16, int32_t) \
  MACRO (32, 4, 2, 8, int32_t) \
  MACRO (64, 1, 2, 64, int64_t) \
  MACRO (64, 1, 3, 64, int64_t) \
  MACRO (64, 1, 4, 64, int64_t) \
  MACRO (64, 1, 5, 64, int64_t) \
  MACRO (64, 1, 6, 64, int64_t) \
  MACRO (64, 1, 7, 64, int64_t) \
  MACRO (64, 1, 8, 64, int64_t) \
  MACRO (64, 2, 2, 32, int64_t) \
  MACRO (64, 2, 3, 32, int64_t) \
  MACRO (64, 2, 4, 32, int64_t) \
  MACRO (64, 4, 2, 16, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_ITERATOR_LDST32_ARG(MACRO, ...) \
  MACRO (32, 1, 2, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF2_ITERATOR_LDST16(MACRO) \
  MACRO (16, 1, 2, 16, int16_t) \
  MACRO (16, 2, 2, 8, int16_t) \
  MACRO (16, 4, 2, 4, int16_t) \
  MACRO (32, 1, 2, 32, int32_t) \
  MACRO (32, 2, 2, 16, int32_t) \
  MACRO (32, 4, 2, 8, int32_t) \
  MACRO (64, 1, 2, 64, int64_t) \
  MACRO (64, 2, 2, 32, int64_t) \
  MACRO (64, 4, 2, 16, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF2_ITERATOR_LDST16_ARG(MACRO, ...) \
  MACRO (16, 1, 2, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 2, 8, int16_t, __VA_ARGS__) \
  MACRO (16, 4, 2, 4, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 2, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF3_ITERATOR_LDST16(MACRO) \
  MACRO (16, 1, 3, 16, int16_t) \
  MACRO (16, 2, 3, 8, int16_t) \
  MACRO (32, 1, 3, 32, int32_t) \
  MACRO (32, 2, 3, 16, int32_t) \
  MACRO (64, 1, 3, 64, int64_t) \
  MACRO (64, 2, 3, 32, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF3_ITERATOR_LDST16_ARG(MACRO, ...) \
  MACRO (16, 1, 3, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 3, 8, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 3, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF4_ITERATOR_LDST16(MACRO) \
  MACRO (16, 1, 4, 16, int16_t) \
  MACRO (16, 2, 4, 8, int16_t) \
  MACRO (32, 1, 4, 32, int32_t) \
  MACRO (32, 2, 4, 16, int32_t) \
  MACRO (64, 1, 4, 64, int64_t) \
  MACRO (64, 2, 4, 32, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF4_ITERATOR_LDST16_ARG(MACRO, ...) \
  MACRO (16, 1, 4, 16, int16_t, __VA_ARGS__) \
  MACRO (16, 2, 4, 8, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 4, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF5_ITERATOR_LDST16(MACRO) \
  MACRO (16, 1, 5, 16, int16_t) \
  MACRO (32, 1, 5, 32, int32_t) \
  MACRO (64, 1, 5, 64, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF5_ITERATOR_LDST16_ARG(MACRO, ...) \
  MACRO (16, 1, 5, 16, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 5, 32, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF6_ITERATOR_LDST16(MACRO) \
  MACRO (16, 1, 6, 16, int16_t) \
  MACRO (32, 1, 6, 32, int32_t) \
  MACRO (64, 1, 6, 64, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF6_ITERATOR_LDST16_ARG(MACRO, ...) \
  MACRO (16, 1, 6, 16, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 6, 32, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF7_ITERATOR_LDST16(MACRO) \
  MACRO (16, 1, 7, 16, int16_t) \
  MACRO (32, 1, 7, 32, int32_t) \
  MACRO (64, 1, 7, 64, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF7_ITERATOR_LDST16_ARG(MACRO, ...) \
  MACRO (16, 1, 7, 16, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 7, 32, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF8_ITERATOR_LDST16(MACRO) \
  MACRO (16, 1, 8, 16, int16_t) \
  MACRO (32, 1, 8, 32, int32_t) \
  MACRO (64, 1, 8, 64, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF8_ITERATOR_LDST16_ARG(MACRO, ...) \
  MACRO (16, 1, 8, 16, int16_t, __VA_ARGS__) \
  MACRO (32, 1, 8, 32, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF2_ITERATOR_LDST32(MACRO) \
  MACRO (32, 1, 2, 32, int32_t) \
  MACRO (32, 2, 2, 16, int32_t) \
  MACRO (32, 4, 2, 8, int32_t) \
  MACRO (64, 1, 2, 64, int64_t) \
  MACRO (64, 2, 2, 32, int64_t) \
  MACRO (64, 4, 2, 16, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF2_ITERATOR_LDST32_ARG(MACRO, ...) \
  MACRO (32, 1, 2, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 2, 16, int32_t, __VA_ARGS__) \
  MACRO (32, 4, 2, 8, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 2, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 2, 32, int64_t, __VA_ARGS__) \
  MACRO (64, 4, 2, 16, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF3_ITERATOR_LDST32(MACRO) \
  MACRO (32, 1, 3, 32, int32_t) \
  MACRO (32, 2, 3, 16, int32_t) \
  MACRO (64, 1, 3, 64, int64_t) \
  MACRO (64, 2, 3, 32, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF3_ITERATOR_LDST32_ARG(MACRO, ...) \
  MACRO (32, 1, 3, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 3, 16, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 3, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 3, 32, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF4_ITERATOR_LDST32(MACRO) \
  MACRO (32, 1, 4, 32, int32_t) \
  MACRO (32, 2, 4, 16, int32_t) \
  MACRO (64, 1, 4, 64, int64_t) \
  MACRO (64, 2, 4, 32, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF4_ITERATOR_LDST32_ARG(MACRO, ...) \
  MACRO (32, 1, 4, 32, int32_t, __VA_ARGS__) \
  MACRO (32, 2, 4, 16, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 4, 64, int64_t, __VA_ARGS__) \
  MACRO (64, 2, 4, 32, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF5_ITERATOR_LDST32(MACRO) \
  MACRO (32, 1, 5, 32, int32_t) \
  MACRO (64, 1, 5, 64, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF5_ITERATOR_LDST32_ARG(MACRO, ...) \
  MACRO (32, 1, 5, 32, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 5, 64, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF6_ITERATOR_LDST32(MACRO) \
  MACRO (32, 1, 6, 32, int32_t) \
  MACRO (64, 1, 6, 64, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF6_ITERATOR_LDST32_ARG(MACRO, ...) \
  MACRO (32, 1, 6, 32, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 6, 64, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF7_ITERATOR_LDST32(MACRO) \
  MACRO (32, 1, 7, 32, int32_t) \
  MACRO (64, 1, 7, 64, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF7_ITERATOR_LDST32_ARG(MACRO, ...) \
  MACRO (32, 1, 7, 32, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 7, 64, int64_t, __VA_ARGS__) \

/* An iterator to call a macro with every supported NF, SEW, LMUL and MLEN value,
   along with its corresponding vector, floating point modes, and info for
   corresponding floating point and vector tuple type.  */
#define _RVV_INT_TUPLE_NF8_ITERATOR_LDST32(MACRO) \
  MACRO (32, 1, 8, 32, int32_t) \
  MACRO (64, 1, 8, 64, int64_t) \

/* Same as above but with an extra argument.  */
#define _RVV_INT_TUPLE_NF8_ITERATOR_LDST32_ARG(MACRO, ...) \
  MACRO (32, 1, 8, 32, int32_t, __VA_ARGS__) \
  MACRO (64, 1, 8, 64, int64_t, __VA_ARGS__) \

#endif
